C语言运行pow幂函数运行结果出错

在codeblocks里,运行C代码,pow(10,2)结果为99,pow(10,4)j结果为999....

查看pow()函数的原型:

double pow(double x,double y);

原型含义其实是:
求一个近似等于x的值近似y次幂的近似值
只不过这里的“近似”的精度比较高而已
这个函数从来没有向你承诺给出精确结果
当i为4时,pow(10, i)无论得到1000.000000000001还是9999.9999999999999都没有违反自己的承诺(是你自己误以为它承诺一定为1000.0而已)
得到什么样的结果与pow的具体算法有关(未必是你自认为的10.0*10.0*10.0*10.0哦)
同样,你也不要以为pow(10, i)就真的是100.0   得到的也有可能是100.0000000000001

传入 pow 函数的是一个浮点数。在极个别奇葩编译器中,因为浮点数的表示问题,10 会被表示为 9.99999999999,所以 10 的 4 次方就是 9999.9999……,double 转成 int 的时候截断,所以剩下了 9999。不过,据说这个极个别的情况只在一些低版本的 mingw 中才存在。。



猜你喜欢

转载自blog.csdn.net/sn_g_e_n_i_u_s_/article/details/70128055
今日推荐