pow(10,2) = 99.99999 因为,这种函数是用级数来计算的,所以,结果并不是整数。
因为pow返回的是double类型,即浮点数,浮点数本身就是表示一个精度的数字,而不是一个准确的数字。可能为99.999999 然后转换int所以成为99,浮点数转换为int是可能丢失精度的。所以浮点数不比较相等,只认为两个数字差距小到一定精度就认为相等。
pow()函数属于math.h库中,两个参数均为浮点值(double)型,返回值也是浮点值(double)型,而实际上pow(10,2)的值为99.999999999...,而在我们在强制类型转化时,直接舍弃小数点后面的数,导致返回的值为99,此为double类型的精度问题。 为解决此问题,我们可以加上任意一个不超过1的小数,来使其进位再强制类型转化为i...
10的2次方在计算机算来是99.9999999,无限接近100但小于100,你用int类型就只取整数部分了。
貌似MATLAB里面keil是向下求整吧,所以10存储时<10(逼近10),那么它的平方也是逼近100,你可以选一个pow(4,2)试试,4可以不损耗存储,所以结果应该就是16了
在极个别奇葩编译器中,因为浮点数的表示问题,10 会被表示为 9.99999999999,所以 10 的 4 次方就...
在极个别奇葩编译器中,因为浮点数的表示问题,10 会被表示为 9.99999999999,所以 10 的 4 次方就...
pow原型。没有(int,uchar),理论上是转换过去然后计算,转换过程中存在丢失精度问题。根据楼主尝试可以知道pow(10,2) 约等于99而pow(10,3)约等于1000。不知楼主用的何种编译器,我本地用10无法通过编译,用10.0(类型为double)可以得到正确结果。
b=pow(10,c);printf("%d\n",b);return 0;} 但是在有的编译系统下,会出现99的结果,原因是这样的:在有的C语言编译系统中(如Keil)中 pow原型:extern float pow(float x, float y),这时打个比方本来整型2就变成1.999999了,结果当然不是100了。但在其他编译系统比例Vc2010中pow函数有六...
(int)强制转成整型,如果是小数就只取整数部分。可能有的编译器会把100保存成99.999999吧,我推测,这样只会取99,不精确。改进办法是改成(int)(pow(10,i)+0.01).