9

我必须比较两个数字。其中一个来自regulat python 代码,另一个来自numpy。调试器显示它们具有相同的值“29.0”,但第一个float类型是,第二个类型是float64,所以a == ba - b == 0False。我该如何处理?有什么方法可以强制常规 python 变量默认float64使用或 numpy 使用?float

更新:最后所有这些值都来自29.0写入的同一个文件,所以我认为数值没有差异。

4

2 回答 2

23

在任何编程语言中,您都不应该将浮点数与相等性进行比较,因为您永远无法知道它们完全相等。相反,您应该测试它们的差异是否小于容差:

if abs(a - b) < 1e-10

float所以这个问题与和之间的区别无关float64(Python会自动转换它们),而是与比较浮点数是否相等的基本问题有关。

另请参阅在 Java 中使用 == 比较浮点数有什么问题?

于 2013-08-07T15:07:49.987 回答
12

如果您使用的是 numpy,那么执行 Antonis 建议的最佳方法是使用 function np.allclose(a, b)。您还可以指定公差(1e-10从上面)。

于 2013-08-07T15:09:32.823 回答