【发布时间】:2024-01-07 19:33:01
【问题描述】:
我试图使用 pow 函数找到完美立方体的立方根,但答案出乎意料 (3375 = 15^3)
#include <bits/stdc++.h>
using namespace std;
int main()
{
double cb = pow(3375, 1.0/3.0);
printf("cb(in double) = %lf\n", cb);
printf("cb(in int) = %d\n",(int)cb);
return 0;
}
它显示的输出是:
cb(in double) = 15.000000
cb(in int) = 14
与人讨论后发现代码,
printf("%0.0lf", 14.0/3);
给出输出
5
我不明白为什么会发生这种情况,如果是由于存储双精度和舍入的精度,那么它应该将其舍入到较小的值,而不是舍入到较大的值。
【问题讨论】:
-
将
double转换为int舍入为0。 -
如果你说的我是正确的,那么为什么 14.0/3 输出为 5
-
也许在你的机器上
cb的结果有点超过 15,比如 15.000000003 舍入到整数 15。或者它是 14.9999999966? -
您应该使用调试器查看实际值,而不是使用
printf。