루프를 사용하지 않고 자바 스크립트에서 범위의 합계를 만들 수 있습니까? 이것은 코드의 속도를 높이기위한 것입니다. 예를 들면 :
#!/usr/bin/env js60
var j = 0, k = 100000000 + 1
for(i = 0 ; i < k ; ++i) { j += i }
console.log(j)
#!/usr/bin/env ruby
puts (1..100_000_000_000_000_000_000_000_000_000_000_000).sum
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚ time js60 p.js
5000000050000000
real 0m0.531s
user 0m0.519s
sys 0m0.011s
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚ time js60 p.js
5000000050000000
real 0m0.514s
user 0m0.502s
sys 0m0.012s
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚ time js60 p.js
5000000050000000
real 0m0.558s
user 0m0.531s
sys 0m0.027s
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚ time ruby q.rb
5000000000000000000000000000000000050000000000000000000000000000000000
real 0m0.105s
user 0m0.088s
sys 0m0.017s
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚ time ruby q.rb
5000000000000000000000000000000000050000000000000000000000000000000000
real 0m0.122s
user 0m0.121s
sys 0m0.000s
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚ time ruby q.rb
5000000000000000000000000000000000050000000000000000000000000000000000
real 0m0.118s
user 0m0.094s
sys 0m0.023s
┌┄┄[sourav::archlinux]┈[/tmp]
└──╼⮚
JS에서 Ruby처럼 빠르게 작업하려면 어떻게해야합니까?
원하는 경우 알고리즘을 사용하여 범위의 합계를 계산할 수 있습니다.
1 + 2 + 3 + 4 + ... + (x - 1) + x
다음과 같다
x * (x + 1) / 2
// Look at the result in the browser console, not the snippet console
const sum = (n) => (n * (n + 1n)) / 2n;
console.log(
sum(
100_000_000_000_000_000_000_000_000_000_000_000n
)
);
이것은 Ruby가하는 것과 같은 종류의 일이라고 확신합니다. 모든 숫자를 개별적으로 계산하지 않고 합산 알고리즘을 사용합니다.
BigInt 100_000_000_000_000_000_000_000_000_000_000_000
가 너무 커서 Javascript에서 number
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다