提问人:mgus 提问时间:6/2/2020 更新时间:6/2/2020 访问量:334
Numpy array_equal 和 float 精确相等性检查
Numpy array_equal and float exact equality check
问:
我知道这里也问过类似的精度问题,但是我正在阅读一个项目的代码,该项目正在浮点数之间进行精确的相等性比较,这让我感到困惑。
假设 和 的类型和 dtype 。这两个变量是由对相同数据执行的相同代码计算的,但已由一台计算机和另一台计算机计算(这是在与 MPI 通信的 AWS 集群上完成的)。x1
x2
numpy.ndarray
np.float32
x1
x2
然后比较这些值如下
numpy.array_equal(x1, x2)
因此,完全相等(无容忍)对于该程序的工作至关重要,并且似乎工作正常。这让我感到困惑。如何比较在不同机器上计算的两个结果,而不会遇到精度问题?什么时候这两个(或更多)浮点数可以相等?np.float32
答:
1赞
Eric Postpischil
6/2/2020
#1
IEEE-754 指定的算术是确定性的,考虑到其第 11 条(2008 年版)中讨论的某些约束,包括表达式计算的合适规则(例如从编程语言中的表达式到 IEEE-754 操作的明确转换,例如必须给出 、 不)。a+b+c
(a+b)+c
a+(b+c)
如果没有使用并行性或构造不当,例如始终将作业划分为相同的部分,并以相同的方式组合它们的结果,而不管计算的完成顺序如何,那么获得相同的结果也就不足为奇了。
阻碍可重现性的一些因素包括不同的并行性、使用不同的数学库(具有不同的函数实现,例如 )以及使用对浮点计算不严格的语言(例如允许但不需要额外的精度)。pow
评论