python - 舍入Python中的错误

标签 python python-3.x floating-point

我有一个简单的代码:

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

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

最佳答案

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

考虑用十进制表示 1/3。您可以将其写为 .3333 或使用更多数字并将其写为 .33333333 或 .333333333333。这是一个“小”数字——只有一位以三为基数的数字——但没有任何十进制数字可以准确地表示它。同样,二进制基数中的任何位数都无法准确表示 0.1。所以你会看到舍入错误。

通常,您不应该试图纠正小的浮点错误。浮点的大部分用途是近似实际算术,用于小误差可以接受的情况,例如近似物理。我们确实力求避免大误差,而分析和处理大误差问题是数值分析这一复杂学科的一部分。

浮点在精确数学中很少使用,尽管有一些应用。如果您想要精确的数学,您应该解释比问题中显示的更多的目标和要求。

关于python - 舍入Python中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53464232/

相关文章:

python - 基于多个定界符拆分字符串不会产生一致的结果

python - 我的脚本和控制台中使用点积的不同输出

c# - Visual C# 方法调用使用过多内存?

swift - 如何在 Swift 中找到 Double 和 Float 的最大值

python - 使用 xlrd 从 http 网站打开 Excel

传递给构造函数的 Python 函数引用变成 c_void_p 数据类型

python - 在 iPython 中使用星号 (*)

想不通C中pow()函数的计算

linux - Python RegEx 捕捉数组名称和大小之间的空白

python - 评估图像分割方法