如果浮点数有时可能不准确,为什么程序员使用浮点数?



如果浮点数有时可能不准确,为什么它们存在? 有人希望在哪些情况下使用浮点数?

(首先,请注意浮点数是精确的。它是近似实数算术的浮点运算。这种区别对于设计好的浮点软件和编写关于它的证明非常重要。

人们使用浮点运算,因为它对于处理不同量级的数字很有用。考虑使用浮点来设计和构造建筑物或其他结构。当设计人员指定 10 米长的梁或电缆时,实际交付的电缆将不是 10 米长。如果测量它并将结果转换为 32 位float1,则转换可能会引入小于 1 微米的误差。您对电缆的测量将具有更大的误差。因此,浮点误差很小,在这个简单的测量中无关紧要。

当完成许多计算时,这些舍入误差不仅可以累积,而且会以令人惊讶的方式组合在一起。如果float还不够,我们可以使用double,其中 10 米左右测量的初始误差将低于 2 飞米(10-15米)。

因此,浮点对于正常的物理用途具有足够的精度:测量和设计对象,处理音频或无线电信号,评估物理或化学假设等等。当浮点使用得当时,浮点运算中的表示误差和舍入误差根本不重要。它们太小而无法注意到;它们对正在完成的工作没有明显的影响。

当新手习惯于大多数整数算术的僵化并对浮点运算的行为感到惊讶时,就会出现使用浮点的问题。尽管错误可能是 9•1015 的一部分,但如果它意味着结果是 6.9999999999999999911182158029987476766109466552734375 而不是转换为int的数字中的 7,那么他们得到错误的结果并且不明白他们的程序是如何出错的。大多数情况下,此错误出现在学生和堆栈溢出问题编写者中,当学习过浮点运算基础知识的人使用浮点代码时,在实践中不是问题。

问题也会出现,因为如上所述,错误可能会以令人惊讶的方式组合在一起。例如,矩阵运算可能是"不稳定的",这意味着它们往往会放大错误。因此,尽管浮点格式可能具有足够的精度,但由于数据和运算的数学属性,结果可能会有很大的误差(与实数算术相比)。

尽管如此,浮点对于某些使用整数算术会是一种负担的工作非常有用。当数字的量级不同时,很难写出处理它们的整数算术。要么必须提前设计扩展(这限制了程序可以使用的数据),要么必须由程序管理,这本质上是对浮点的重新发明。

脚注

1个 IEEE-754 基本 32 位二进制浮点数,具有符号、8 位指数和 24 位有效数。

2IEEE-754 基本 64 位二进制浮点数,它有一个符号、一个 11 位指数和一个 53 位有效数。

相关内容

最新更新