存储在具有相同积分部分的两个变量中的值不一致

Discrepancy in the value stored in two variables having the same integral part

本文关键字:两个 变量 不一致 存储      更新时间:2023-10-16

我试图找到10^12的立方根,并在c++中使用以下代码。令我惊讶的是,返回的值是不同的。有谁能帮我解决这个问题吗?

输出:10000 9999

    int y;
    double x=pow(1000000000000, 1./3);
    double r=floor(x);
    y=(int)r;
    cout<<x<<" ";
    cout<<y;

您的floor操作是这里的问题。如果返回值实际上是(由于精度误差)x = 9999.999怎么办?floor(x)将返回9999,而cout << x根据其内部精度设置直接打印浮点数,因此cout << x进行隐式舍入,这就是为什么那里显示10000。

尝试将x四舍五入为整型:

int y;
double x=pow(1000000000000, 1./3);
y=(int)(x+0.5); //Proper rounding
cout<<x<<" ";
cout<<y;
return 0;
double x=pow(1000000000000, 1./3);

刚好1/3不能用double显示。

在处理双结果时至少可以说总是很有趣。0.001 + 0.001可能就是0.0