Javascript 不能使用 10100401822940525,它就像 Windows 中的“conn”文件夹。为什么 js 会因为这个数字而失败?
您可以查看示例,
Javascript 不能使用 10100401822940525,它就像 Windows 中的“conn”文件夹。为什么 js 会因为这个数字而失败?
您可以查看示例,
在 IEEE 浮点类型数字中,数字越大,数字之间的差距越大。当您查看数字的存储方式时,这是有道理的。
考虑到负指数和非负指数的可能值的数量相同。这意味着 0 和 1 之间的可能数字数量与 1 和无穷大之间的数量相同。显然,1 和 Infinity 之间的数字间隔得更远。这个间距实际上是分布的,所以距离 0 越远,可能存储的数字之间的差距就越大(没有真正的最大数字,只是最终你到达了没有数字与无穷大区分开来的地步)。
这实际上效果很好,因为在大多数情况下,在处理较大的数字时您需要的精度较低。10100401822940524
和之间的差异10100401822940526
远不如数字大小之间的差异显1
着3
。能够表示数字2
比数字更重要,10100401822940525
并且您被限制为 64 位。
我发现了这个: http: //gskinner.com/blog/archives/2011/03/the-case-of-the-disappearing-number.html
不知道他说的对不对,但听起来很有道理。;)
这是浮点舍入的一个实例。Javascript 中的数字存储(AFAIK)为双精度浮点数。浮点数的精度有限,所以当数字太大时,它们不能再存储为精确的整数,需要四舍五入。
这是另一个例子,错误更大。http://jsfiddle.net/NhZ75/
如果您想知道数学为什么有效,那是因为大多数计算机执行浮点数学运算的精度比存储它的精度高,因此舍入错误通常只发生在您将数字存储在变量中时。