【发布时间】:2018-06-13 19:11:54
【问题描述】:
可以告诉我在 c++ 中使用双数据类型的乘法行为吗?在下面的示例程序中,我有三个 double 类型的变量 (x,y,z)。当我将这些变量相乘时,产品会根据顺序而有所不同。请记住,我在示例中使用的值是我的示例计算值。
void main()
{
double x, y, z;
double prod1, prod2;
x = 8.3832170034737544e-05;
y = 5.6690000000000000e-08;
z = 0.29999999999999999;
prod1 = x*y*z;
prod2 = y*z*x;
}
结果:
prod1 : 1.4257337157807814e-12
prod2 : 1.4257337157807812e-12
在上面的示例中,prod1 和 prod2 的结果不同。 我该如何解决这个问题,无论 (x,y,z) 的顺序是什么并使用完全相同的值,我总是可以得到相同的结果。
【问题讨论】:
-
双精度只适用于大约 15 位数字。在那之后你会感到你最好忽略它。果然,差异大约是 16 位数。你赢不了这场战斗,所以别担心。
-
这是浮点运算的一个属性。你无法“修复”它。
标签: c++ types overflow precision