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)
}
};
是否可以确定浮点数何时精确或近似?
答案 0 :(得分:4)
是的,只要您使用二进制浮点(例如非常常见的IEEE-754二进制浮点)并且不会溢出到无穷大或下溢到次正规数。在二进制浮点数中,乘以或除以2是精确的,直到达到指数限制。
对于32位IEEE-754二进制文件,有限正态值上升到2 128 -2 104 并且下降到2 -126 。 (有正低于2 -149 的正常低于正常值,但它们的有效位数[小数部分]中的位数比正常数字少,因此精度会降低。)
对于64位IEEE-754二进制文件,有限正态值上升到2 1024 -2 971 并下降到2 -1022 。 (有正负的正常值低至2 -1074 。)
没有办法(没有上下文)来确定浮点数是准确表示还是仅接近某些先前的数字。 (有一种方法可以检测浮点运算何时对结果进行舍入。在编程语言的实现中,通常忽略访问此附加信息。)一旦将数字转换为浮点数,浮点数就会精确表示它代表什么。它不包含有关先前发生的舍入错误量的信息。 (如果您有关于先前号码的其他信息,例如它来自带有五位有效数字的十进制数字,那么您可以推断出有关原始号码的信息。)