【发布时间】:2014-06-08 10:47:47
【问题描述】:
我正在使用标准库方法 pow() 计算正整数的第 n 个根。这是我程序中的 sn-p:
double x,y;
x=pow(64,(1.0/3));
int z;
printf("x=%lf\n",x);
z=(int)x;
printf("%d\n",z);
但是在找到 64 的立方根时。X 打印为 4.000000 而 z 打印为 3。为什么会这样?
有人可以提出更好的算法吗?
【问题讨论】:
-
类型很重要,确保你写的是
64.0(double) 而不是64(integer),3也是如此。另外,你有没有包括数学(我假设你有,但只是检查)。您的编译器是否向您提供任何警告? -
对于您的特定问题,我怀疑您的输出在 printf 中被四舍五入,但您的演员是地板。请改用
int z = round(x);。 -
可能 x 类似于 3.99999999999737 或接近 4 并被
printf四舍五入,而转换为 int 只会截断它。 -
这很可能是由于浮点精度。
-
z=round(x) 将给出 64 @ilent2 的第四根的错误答案