问个POW()函数问题

[复制链接]
5479|7
 楼主| huangli211 发表于 2008-11-10 12:58 | 显示全部楼层 |阅读模式
KEIL里面有MATH.H的数**算头文件POW();意思是求X的Y次方功能,     KL=POW(10,2);返回的是99,后来试了以下,除10的1次方结果正确以外,无论10的2---9次方,结果都是正确值少1的返回;搞不懂了
computer00 发表于 2008-11-10 13:05 | 显示全部楼层

你用的是整数吧?这个函数返回的是浮点数

浮点数向整数转化时,采用的是直接丢弃小数部分的方式,所以结果会偏小。
如果要四舍五入的话,运算结果要加上0.5,例如:
unsigned long int x;
x=pow(10,2)+0.5;
这样x的结果就会是100了,当然你可以试试其它数。

当然了,如果最后的结果是浮点数,那么就不用这个加0.5的操作,最后的结果当然也肯定会有一定误差,这个主要是浮点数精度问题,浮点数比较时也不能直接用等号比较。
 楼主| huangli211 发表于 2008-11-10 13:22 | 显示全部楼层

是的了,刚才有仔细看看函数说明

确实是浮点型运算,返回的是一个FLOAT型,我把他付给了INT型,结果小数点后的99999999999999999999就被忽略了.
HWM 发表于 2008-11-10 13:24 | 显示全部楼层

基本习惯: = + 0.5;

 楼主| huangli211 发表于 2008-11-10 13:24 | 显示全部楼层

那么是否有INT型的函数呢?

HWM 发表于 2008-11-10 13:26 | 显示全部楼层
 楼主| huangli211 发表于 2008-11-10 13:49 | 显示全部楼层

谢谢computer00,HWM两位朋友

xwj 发表于 2008-11-10 13:55 | 显示全部楼层

整数次方字节用乘法即可,又快又好

但要注意计算溢出问题哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

86

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部