理解JavaScript的浮点数
理解JavaScript的浮点数
大多数编程语言都有多种数据类型,但是Javascript 却只有一种。使用 typeof 运算符查看无论是 ,整数还是浮点数JavaScript都简单的返回一个结果
1 | |
事实上JavaScript中所有的数字都是双精度浮点数。
这是由IEEE 745标准定制的64位编码数字 —即 “doubles”; JavaScript使用双精度浮点数来完美的表达高到53位精度的整数,-2^53次方到2^53次方的所有整数都是有效的双精度浮点数。因此尽管JavaScript中缺少明显的整数类型,但是完全可以进行整数运算。
位运算比较特殊JavaScript不会直接将操作数作为浮点数进行运算,而是会将其隐式的转换为32位整数后进行运算。以按位或为例:
1 | |
将8 和1分别转为32位的二进制序列然后进行运算, 所有的位运算符的工作方式是相同的。他们先将操作数转换为整数,然后使用整数位模式进行运算,最后将结果转换为标准的JavaScript浮点数。
浮点数的运算需要时刻保持警惕,因为它们出了名的不精确,甚至一些看起来最简单的算术运算都会产生不正确的结果
1 | |
浮点数权衡了精度和性能。当我们关心精度时,要小心浮点数的局限性。一个有效的解决方法是尽可能采用整数值运算,因为整数在表示时不需要舍入。只需要担心范围符合 -2^53 到 2^53的整数
Effective JavaScript (二)
http://example.com/2018/06/21/read-book-effective-two/