舍入python中的错误

时间:2018-11-25 02:47:20

标签: python python-3.x floating-point

我有一个简单的代码:

delx=0.1;
delt = 10**-3;
r = delt/delx**2

我在控制台中得到r = 0.09999999999999998。为什么这么少的小数点会有舍入误差?我该如何纠正?

1 个答案:

答案 0 :(得分:0)

您的问题“为什么这么少的小数点会有舍入误差?”建议您认为浮点算术应该对少数小数位精确。但是,您的浮点数不使用十进制。它使用二进制。 (Python并没有强制要求这样做。每个Python实现都可以使用自己的浮点格式。最常见的是,使用底层系统的格式,并且最常见的是基于二进制的格式。)

请考虑以小数表示1/3。您可以将其写为.3333或使用更多数字,然后将其写为.33333333或.333333333333。它是一个“小”数字-仅以3为底的一位数字-但没有十进制数字可以准确地代表它。同样,二进制数中的任何数字都不能精确表示.1。所以您会看到舍入错误。

通常,您不应该寻求纠正小的浮点错误。浮点数的大多数使用是近似于实数算术,用于小误差较小的场合,例如近似物理。我们确实致力于避免大错误,而分析和处理大错误的问题是称为数值分析的复杂主题的一部分。

浮点数很少用于精确数学,尽管对此有一些应用。如果您需要精确的数学知识,则应该说明比您的问题更多的目标和要求。