gpt4 book ai didi

javascript - 是什么导致 javascript 中的超小数字被识别为不同的 bool 值?

转载 作者:行者123 更新时间:2023-11-30 09:12:30 24 4
gpt4 key购买 nike

为什么这些非常小的数字有不同的输出?

Chrome Javascript Console

决定一个数字在不再为真并变为假之前可以有多小的决定因素是什么?

一个数字(顶部)的长度为 327 个字符(小数点后 324 个零)的输出为 true:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000001

另一个(底部)长 326 个字符(小数点后 323 个零)输出 false:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000001

经进一步调查: enter image description here

为什么这会成就或打破一个数字?

最佳答案

您刚刚用完了表示您的数字的位。

javascript 中的数字是 IEEE 754 Double precision floating point numbers (在 C 中键入“double”)。 double 编码如下:

 ┌─┬────────────┬──────────────────────────────────────┐
│ │ bits 52-62 │ bits 0 - 51 │
└─┴────────────┴──────────────────────────────────────┘
^ ^ ^
│ │ └── number (also called mantissa)
│ └────── exponent
└── sign bit

解释编码的公式是:

            (exponent - 1023)
number x 2

或者在代码中它看起来像:

number * Math.pow(2, exponent - 1023)

因此 javascript(或 C/Java/C# 等 double )可以表示的最小数字是:

1 x 2⁻¹⁰²²   // exponent 0 has special meaning so the smallest exponent is 1

这实际上是 5 x 10⁻³²⁴。即:

0.0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0005

无法表示任何更小的值,因此四舍五入到最接近的可表示数字。

关于javascript - 是什么导致 javascript 中的超小数字被识别为不同的 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57548467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com