在浮点数和双精度浮点数上执行乘法、除法、加法和减法等运算是否会保持它们的精度?
例如,如果我将1000个浮点数相乘(或相除、相加、相减),我是否仍然保持7位数字的精度?
我在这个网站上读到了这篇文章,指出精度是被保持的(http://floating-point-gui.de/formats/fp/),但我想再次确认。
在浮点数和双精度浮点数上执行乘法、除法、加法和减法等运算是否会保持它们的精度?
例如,如果我将1000个浮点数相乘(或相除、相加、相减),我是否仍然保持7位数字的精度?
我在这个网站上读到了这篇文章,指出精度是被保持的(http://floating-point-gui.de/formats/fp/),但我想再次确认。
有精度和准确度之分。一个float
的精度总是相同的。但你的计算的准确度取决于各种实现特定的细节。
例如,如果每个计算引入了半个LSB的误差,那么经过1000次计算后,结果可能会偏离500个LSB。因此,尽管答案精确到7位数字,但只有4位数字是准确的。
1e20 + 14 - 1e20
这个计算,尽管只涉及两个操作的舍入误差,但其通常仅准确到0位数字。 - user2357112(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
。在处理非整数类型时,始终要注意舍入误差。一些舍入误差失败的示例