我正在使用标准库方法pow()计算正整数的第n个根。下面是我的程序片段:

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。为什么?
有人能提出更好的算法吗?

最佳答案

如果您在x上打印更多的数字,您将看到问题所在(我随机选择了30个):

double x ;
x = pow(64, 1.0/3);
printf("x=%.30lf\n",x);

输出:
x=3.99999999...999600000000

所以很明显,如果你把x转换成int它就会变成3
没有一个“完美”的解决方案如果你只处理整数,你可以创建你自己的根函数,但如果你想能够使用浮点,你需要处理精度问题,因为浮点表示。
也许有一些C库可以帮助您解决此类问题。

10-02 10:23
查看更多