我正在使用标准库方法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库可以帮助您解决此类问题。