乘法浮子的精度

时间:2016-05-07 03:15:31

标签: floating-point double precision

对浮点数和双精度执行运算(如乘法,除法,加法和减法)是否保持其精确度?

例如,如果我将1000个浮点数乘以(或除以,相加,相减),我还能保持7位数的精度吗?

我在这个网站上已经阅读了精确度(http://floating-point-gui.de/formats/fp/),但我想仔细检查。

2 个答案:

答案 0 :(得分:4)

There's precision and there's accuracyfloat的精度始终相同。但计算的准确性取决于各种特定于实现的细节。

例如,如果每个计算引入了一个半LSB的错误,那么在1000次计算之后,结果可能会被500个LSB关闭。因此,尽管答案精确到7位数,但它只能精确到4位数。

答案 1 :(得分:1)

答案取决于“保持精确度”的含义。单个浮点始终具有大约7位数的相同“精度”(由于二进制存储,它不完全是7位数。)

某些计算可能会引入舍入误差,这可能会使最低有效位不正确,但这些错误可能会加起来(如用户3386109在其答案中解释)或者它们可以被放大。放大的一个例子是,如果我计算(f(x+h)-f(x))/h形式的微积分极限,因为h变为零。如果f(x+0.0000001) 为3.1234567,但我得到3.1234566,f(x)给出正确的3.1234568。现在,公式(3.1234567-3.1234568)/0.0000001,即-1,但我得到(3.1234566-3.1234568)/0.0000001,即-2

突然间,我最不重要的数字是我最重要的数字。还有其他方法可以放大舍入误差和避免它的技术。

始终在处理非整数类型时要注意舍入错误。 Some examples of rounding error failures