有些人可以用c ++中使用double数据类型的乘法行为来启发我吗?在下面的示例程序中,我有三个类型为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)的顺序是什么,并且使用完全相同的值,我总能得到相同的结果。
答案 0 :(得分:0)
由于浮点类型的精度。
双重保证精确15位小数。
如果您愿意,可以使用long double类型。 但它不是IEEE-754要求的
<div class="col-md-4">
<figure class="overlay overlay4 light"><a href="#"></a> <img src="style/images/service/tele1.png" alt="" />
</figure>
</div>
<div class="col-md-4">
<figure class="overlay overlay4 light"><a href="#"></a> <img src="style/images/service/broad.png" alt="" />
</figure>
</div>
<div class="col-md-4">
<figure class="overlay overlay4 light"><a href="#"></a> <img src="style/images/service/broad.png" alt="" />
</figure>
</div>
<div class="col-md-4">
<figure class="overlay overlay4 light"><a href="#"></a> <img src="style/images/service/broad.png" alt="" />
</figure>
</div>
<div class="col-md-4">
<figure class="overlay overlay4 light"><a href="#"></a> <img src="style/images/service/broad.png" alt="" />
</figure>
</div>
结果
#include <iostream>
int main(void)
{
long double x, y, z;
long double prod1, prod2;
x = 8.3832170034737544e-05;
y = 5.6690000000000000e-08;
z = 0.29999999999999999;
prod1 = x*y*z;
prod2 = y*z*x;
std::cout.precision(17);
std::cout << prod1 << std::endl;
std::cout << prod2 << std::endl;
return 0;
}