如果浮点数有时可能不准确,为什么会存在? 有人想在什么情况下使用浮点数?
答案 0 :(得分:3)
(首先,请注意浮点数是精确的。它是逼近实数算术的浮点算法。这一区别对于设计好的浮点软件和编写证明很重要。)
人们使用浮点运算,因为它对于处理数量级不同的数字非常有用。考虑使用浮点设计和建造建筑物或其他结构。当设计人员指定10米长的横梁或电缆时,实际交付的电缆将不会长10米。如果对其进行测量,然后将结果转换为32位float
1 ,则转换可能会引入误差,该误差将小于1微米。您对电缆的测量会比此错误更多。因此,浮点误差很小,在这种简单的测量中无关紧要。
完成许多计算后,这些舍入误差不仅会累积,而且还会以令人惊讶的方式组合。如果float
不够用,我们可以使用double
,其中10米左右的测量的初始误差将在2 feftometers(10 −15 米)以下。 / p>
因此,浮点对于正常的物理用途具有很高的精度:测量和设计对象,处理音频或无线电信号,评估物理或化学假设等。如果很好地使用浮点,则浮点算术中的表示误差和舍入误差根本就无关紧要。它们太小了而不能引起注意。它们对完成的工作没有明显影响。
当新手已经习惯大多数整数算法的刚度并且对浮点的行为感到惊讶时,就会出现使用浮点的问题。尽管错误可能是9•10 15 中的一部分,但是如果它意味着结果是6.99999999999999911182158029987476766109109552552375,而不是转换为int
的数字中的7,那么它们将得到错误的结果,不了解他们的程序是如何出错的。通常,当学习浮点运算基础的人使用浮点代码时,该错误会在学生和Stack Overflow问题作者中出现,而在实践中并不是问题。
之所以出现问题,是因为如上所述,错误可能以令人惊讶的方式组合在一起。例如,矩阵运算可能是“不稳定的”,这意味着它们往往会放大误差。因此,尽管浮点格式可能具有很高的精度,但是由于数据和运算的数学特性,结果可能会出现较大的错误(与实数算法相比)。
尽管如此,浮点数对于某些工作非常有用,因为使用整数算术会很麻烦。当数字大小不同时,很难编写处理它们的整数算法。要么必须预先设计缩放比例(这限制了程序可以使用的数据),要么必须由程序进行管理,这实际上是对浮点的重新发明。
1 IEEE-754基本的32位二进制浮点,具有一个符号,一个8位指数和一个24位有效数字。
2 IEEE-754基本的64位二进制浮点,具有一个符号,一个11位指数和一个53位有效数字。