2

Javascript 不能使用 10100401822940525,它就像 Windows 中的“conn”文件夹。为什么 js 会因为这个数字而失败?

您可以查看示例,

http://jsfiddle.net/ymutlu/yCpWh/1/

4

3 回答 3

4

在 IEEE 浮点类型数字中,数字越大,数字之间的差距越大。当您查看数字的存储方式时,这是有道理的。

考虑到负指数和非负指数的可能值的数量相同。这意味着 0 和 1 之间的可能数字数量与 1 和无穷大之间的数量相同。显然,1 和 Infinity 之间的数字间隔得更远。这个间距实际上是分布的,所以距离 0 越远,可能存储的数字之间的差距就越大(没有真正的最大数字,只是最终你到达了没有数字与无穷大区分开来的地步)。

这实际上效果很好,因为在大多数情况下,在处理较大的数字时您需要的精度较低。10100401822940524和之间的差异10100401822940526远不如数字大小之间的差异显13。能够表示数字2比数字更重要,10100401822940525并且您被限制为 64 位。

于 2012-05-25T15:07:31.863 回答
1

我发现了这个: http: //gskinner.com/blog/archives/2011/03/the-case-of-the-disappearing-number.html

不知道他说的对不对,但听起来很有道理。;)

于 2012-05-25T14:59:24.267 回答
1

这是浮点舍入的一个实例。Javascript 中的数字存储(AFAIK)为双精度浮点数。浮点数的精度有限,所以当数字太大时,它们不能再存储为精确的整数,需要四舍五入。

这是另一个例子,错误更大。http://jsfiddle.net/NhZ75/

如果您想知道数学为什么有效,那是因为大多数计算机执行浮点数学运算的精度比存储它的精度高,因此舍入错误通常只发生在您将数字存储在变量中时。

于 2012-05-25T15:03:58.930 回答