zin*_*ino 1 javascript sqlite floating-point precision
http://floating-point-gui.de/formats/binary/
二进制只能将这些数字表示为有限分数,其中分母是 2 的幂
这是否意味着通过此过程计算出的数字都可以相互相加或乘以 2 任意次数,并且仍然具有精确的二进制/浮点表示形式,没有舍入误差?
const dv2 = (num, limit) => {
limit--;
if (limit === 0) {
return;
} else {
console.log(num, limit);
dv2((num / 2), limit)
}
};
Run Code Online (Sandbox Code Playgroud)
是否可以确定浮点数何时是精确值还是近似值?
是的,只要您使用二进制浮点(例如非常常见的 IEEE-754 二进制浮点)并且不会溢出到无穷大或下溢到次正规数。在二进制浮点中,在达到指数限制之前,乘法或除法都是精确的。
\n\n对于 32 位 IEEE-754 二进制,有限正常值最高可达 2 128 \xe2\x88\x922 104,最低可达 2 \xe2\x88\x92126。(有低至 2 \xe2\x88\x92149 的正次正规值,但它们的有效数 [小数部分] 中的位数比正常数少,因此精度会降低。)
\n\n对于 64 位 IEEE-754 二进制,有限正常值最高可达 2 1024 \xe2\x88\x922 971,最低可达 2 \xe2\x88\x921022。(正次正规值低至 2 \xe2\x88\x921074。)
\n\n没有办法(没有上下文)来确定浮点数是否精确表示或仅近似某个先前的数字。(有一种方法可以检测浮点运算何时对结果进行舍入。在编程语言的实现中通常会忽略访问此附加信息。)一旦数字转换为浮点数,浮点数就准确地表示它代表什么。它不包含有关先前发生的舍入误差量的信息。(如果您有关于先前数字的其他信息,例如它来自具有五个有效数字的十进制数字,那么您也许能够推断出有关原始数字的信息。)
\n| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |