浮点数相关知识
IEEE754
- JavaScript中的浮点数采用IEEE-754格式的规定。更具体的说是一个双精度格式,这意味着每个浮点数占64位。
- 标识位1位
- JavaScript中的某些东西如+0 和 -0,标志位说明一切——JavaScript中的所有数字都有符号位。
- 指数: 11位–这允许指数最大到1024
- Infinity和NaN也被编码进浮点数——2047作为一个特殊的指数。
- 尾数: 剩下的52位代表的尾数。
- 如果尾数是0,它是一个正无穷或负无限。
- 如果不是,那么它是NaN。
舍入误差
-
浮点规范指定ECMAScript最多使用52个尾数,所以舍入误差变得很小——规范的具体细节规避了大部分的舍入误差。
-
在JavaScript处理浮点数
- 建议是使用库,像sinfuljs或mathjs。
- 另一个被多次重复的建议是使用内置的toPrecision()和toFixed()方法。使用他们时最容易犯得逻辑错误是忘记这些方法的返回值字符串。
function add_Error(x, y) { return x.toPrecision() + y.toPrecision() } /* > foo(0.1, 0.2) "0.10.2" **/
设计内置方法toPrecision()和toFixed()的目的仅是用于显示。谨慎使用!
网友评论