【发布时间】:2021-07-30 11:38:58
【问题描述】:
我正在将 matlab 代码转换为 python。我发现 matlab 和 python 的总和有一个奇怪的差异。我想在 python 中有相同的输出,就像我在 matlab 中一样。可能吗 ? 在matlab中
x = [-200:200]/200; % 401 values from -200 to 200 y =sum(x) y = 9.9920e-16
但在 python 中使用不同的模块我得到了答案
x = np.arange(-200,201)/200 # 401 values from -200 to 200 y = np.sum(x) y = 1.4210854715202004e-14 z = sum(x) z = -8.43769498715119e-15 zmath = math.fsum(x) zmath = 0.0
【问题讨论】:
-
您正在使用 IEEE754 浮点数。你不能指望绝对准确:数值总是近似的。您的 Python 和 Matlab 代码 sn-ps 都返回大约为零。像这样的“奇怪”行为是完全正常的。
-
那么我使用哪些浮点值在 python 中获得相同的输出,,就像 matlab 一样
-
如果你只是运行一个 for 循环并将它们相加,那么我们可以获得相同的结果....但这就像 matlab 中的 sum (x)