<分区>
我试图找到 10^12 的立方根,并在 C++ 中使用了以下代码。令我惊讶的是,返回的值是不同的。谁能帮我解决这个问题。
输出:10000 9999
int y;
double x=pow(1000000000000, 1./3);
double r=floor(x);
y=(int)r;
cout<<x<<" ";
cout<<y;
<分区>
我试图找到 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
根据其内部精度设置直接打印 float ,因此 cout << x
进行隐式舍入,这就是 10000 显示在那里的原因。
通过执行以下操作尝试将 x 正确舍入为 int:
int y;
double x=pow(1000000000000, 1./3);
y=(int)(x+0.5); //Proper rounding
cout<<x<<" ";
cout<<y;
return 0;
关于c++ - 存储在具有相同整数部分的两个变量中的值的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24159367/