2

我正在尝试将大量数字相加,但结果不正确。

var searchSpace = 36;
var length = 11;
var combinations = 0;

for(var i = 1; i <= length; i++) {
    combinations += Math.pow(searchSpace, i);
}

变量combinations最终为 135,382,323,952,046,190,这并不完全正确。应该是135,382,323,952,046,196(怎么减 6?!)有什么想法吗?

4

2 回答 2

7

JavaScript 使用 IEEE-754 64 位双精度数作为其数字格式。这些不能代表任意精确的值;当您超过某个阈值并开始存储接近(但不完全准确)实际值的值时,它们会变得不正确。根据这个较早的答案,可以准确存储的最大值是 2 53,大约是 9 × 10 15。你的数字(大约 1.3 × 10 17)比这个大,所以(很有可能)它不能被准确地表示。

如果你想在 JavaScript 中得到准确的答案,你需要使用一个支持任意精度整数的库。一个快速的谷歌搜索出现了这个库,但我不能保证它有多准确。

希望这可以帮助!

于 2012-06-15T04:17:00.457 回答
4

Javascript 中的所有数字实际上都是浮点数。您正在处理非常大的数字,并对这些数字进行多次操作。在这种情况下,处理浮点数的固有错误很快就会堆积起来,从而导致“错误”。

在这么大的数字上落后 6 分实际上是相当不错的。你只差了 0.000000000000004431%,大约

于 2012-06-15T04:17:30.190 回答