【发布时间】:2022-02-01 23:03:44
【问题描述】:
我有两个双精度向量。 double 的值在 -1000 到 1000 之间。
两个向量包含相同的数字,但顺序不同。
例如
Vector1 = {0.1, 0.2, 0.3, 0.4};
Vector2 = {0.4, 0.2, 0.1, 0.3};
假设总和通过以下方式完成,是否保证 Vector1 的总和将完全等于 Vector2 的总和:
double Sum = 0;
for (double Val : Vector) Sum += Val;
我担心双重不精确。
【问题讨论】:
-
有保证吗?不,可能不是。如果你想要精确的算术,不要使用浮点数。
-
对于任何语言、句号的固定精度浮点数,保证不可能。查找题为“每个计算机科学家都应该了解的浮点运算知识”的论文。
-
好吧,保证是可能的。例如,在添加三个或更多浮点数的地方,编译器可以发出代码将它们放入一个数组中,然后以某种方式对它们进行排序,然后从左到右添加它们。每个人都会讨厌这样,因为它会很慢,并且由于每次使用不同的值调用代码时顺序不同而产生不可预测的结果。
标签: c++ floating-point precision