Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么是2.65+;2.66 = 5.3100000000000005_Javascript - Fatal编程技术网

Javascript 为什么是2.65+;2.66 = 5.3100000000000005

Javascript 为什么是2.65+;2.66 = 5.3100000000000005,javascript,Javascript,为什么Javascript中的2.65+2.66=5.3100000000000005 因为在内部,计算机使用一种格式(二进制浮点) 这根本不能准确地表示0.1、0.2或0.3这样的数字 当编译或解释代码时,您的“0.1”已被删除 按该格式四舍五入到最接近的数字,这将导致较小的 甚至在计算之前就存在舍入误差\ 浮点数需要记住的基本点是:它们占用有限的位,并尝试使用基数为2的算术来表示原始数字 如您所知,在以2为基数的运算中,整数由其包含的2的幂表示。因此,6将表示为4+2,即二进制表示为110

为什么Javascript中的2.65+2.66=5.3100000000000005

因为在内部,计算机使用一种格式(二进制浮点) 这根本不能准确地表示0.1、0.2或0.3这样的数字

当编译或解释代码时,您的“0.1”已被删除 按该格式四舍五入到最接近的数字,这将导致较小的 甚至在计算之前就存在舍入误差\ 浮点数需要记住的基本点是:它们占用有限的位,并尝试使用基数为2的算术来表示原始数字

如您所知,在以2为基数的运算中,整数由其包含的2的幂表示。因此,6将表示为4+2,即二进制表示为110

为了理解分数是如何表示的,你必须考虑我们在十进制系统中是如何表示分数的。数字的小数部分(例如0.11)表示为10的反幂的倍数(因为基数是10)。因此,0.11实际上是1/10+1/100。正如您所理解的,这还不够强大,无法在有限的位数中表示所有小数。例如,1/3等于0.333333。。。。以永无止境的方式。如果我们只有32位的空格来写下这个数字,那么我们最终只能得到与原始数字0.33333333的近似值。例如,如果将该数字乘以3而不是您预期的1,则该数字将为0.99999999999999999999

base-2的情况类似。每个分数将表示为2的反幂的倍数。因此,0.75(十进制)(即3/4)将表示为1/2+1/4,这意味着0.11(以2为基数)。正如基数10不足以以有限的方式表示每个分数一样,基数2也不能在有限的空间内表示所有分数

现在,尝试在base-2中表示0.11;你从11/100开始,试着找到一个2的反幂,它刚好小于这个数。1/2不起作用,1/4也不起作用,1/8也不起作用。1/16符合要求,因此在小数点后第4位标记1,然后从11/100中减去1/16。剩下的是19/400。现在试着找出符合描述的下一个2的幂。1/32似乎就是那个数字,在点后第五位,用19/400减去1/32,得到13/800。下一个是1/64,剩下的是1/1600,因此下一个是1/2048,等等。因此我们得到了0.00011100001,但它继续下去;你会看到,总有一小部分剩余。现在,我没有完成整个计算,但是在点后面输入32个二进制数字之后,可能还剩下一些分数(这是假设所有的32位空间都用来表示小数部分,但事实并非如此)。因此,我相信你会明白,得出的数字可能与实际值存在一定程度的差异

见:


因为javascript不使用数字的十进制表示,所以它使用IEEE二进制浮点表示。在内部,这两个数字都表示为尾数(介于-1和1之间的值)和一个指数,该指数是某个二进制正整数或负整数,以便计算机中的值(尾数乘以指数幂的2)尽可能接近您试图表示的值。