|
1
3
因为你在10垒工作。IEEE-754双精度二进制浮点工作于二进制(基2)。例如,在这种表述中,
正如你从我上面的陈述中看到的,即使是十分之一,你也会遇到不精确的数字,而不必去到令人不快的值(就像你得到9007199254740993这样不可表示的整数一样)。因此著名
不使用内置浮点。您可能只使用整数(因为它们从-9007199254740992到9007199254740992是可靠的),然后在输出时插入相关的小数。您可能会发现这个问题的答案很有用: How to deal with floating point number precision in JavaScript? .
你可能想知道为什么,如果
|
|
2
1
这是因为 二元的 浮点表示。取0.8、0.4、0.2和0.1的值作为双精度值。它们实际存储的值是:
正如您很容易看到的,每次将数字减半时,与精确的十进制值的差就减半。这是因为所有这些都有完全相同的意义,并且只有不同的指数。如果你看他们的十六进制表示,这就更清楚了:
所以
差异
在实际的、数学的值和实际存储的值之间的某个位置在最后一个位之内或之下。指数越低,该位的值越小。从另一个角度看:1.6是
如果你把 十进制的 关键是,你实际上改变了 二元的 指数也是。不完全是成比例的,因为我们处理的是不同的基数,但基本上是“等价的”(如果这是一个恰当的词)。数字越高,指数越高,因此数学值和浮点值之间的差值越大。 |
|
|
3
0
不是一个答案,而是一个长的评论。 数量级不是有罪的,因为浮点表示将数字标准化为1到2之间的尾数:
指数分别处理。 |
|
|
Leo · 为什么carg(-0)返回-pi? 1 年前 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 2 年前 |
|
|
Alexander · 为什么数字的输出不同? 2 年前 |
|
Ronny · 如何防止程序返回“inf”? 2 年前 |
|
|
EMS · 为什么双重打印的值与C中的浮点值相同,而它们的大小不同? 2 年前 |
|
|
Dakolas · 对python十进制库感到困惑 2 年前 |
|
|
RTC222 · 无法获取vrndscalepd的正确舍入模式代码 2 年前 |