比较几台不同机器上的浮点计算结果,它们始终产生不同的结果.这是一个重现行为的简化示例:
import numpy as np
from numpy.random import randn as rand
M = 1024
N = 2048
np.random.seed(0)
a = rand(M,N).astype(dtype=np.float32)
w = rand(N,M).astype(dtype=np.float32)
b = np.dot(a, w)
for i in range(10):
b = b + np.dot(b, a)[:, :1024]
np.divide(b, 100., out=b)
print b[0,:3]
Run Code Online (Sandbox Code Playgroud)
不同的机器会产生不同的结果
但我也可以得到相同的结果,例如在同一年份的两台MacBook上运行.这种情况发生在具有相同版本的Python和numpy的机器上,但不一定与相同的BLAS库链接(例如,加速Mac上的框架,Ubuntu上的OpenBLAS).但是,不同的数值库是否应该符合相同的IEEE浮点标准并给出完全相同的结果?