pow

 
pow运算的都是实型
你肯定是字符转整形在转实型运算是计算机存储上发生了变化
例如5.689×1000输出整形为5688
因为计算机存5.689存为5.6889999999999 
参考资料:自己经验
 
这是数据格式转换的问题。幂函数pow是用数值逼近的方法给出的,并不保证严格精确,同时执行效率也不高。(int)(99.999999999) = 99而不是100,所以得到99是有可能的。
建议你将 b=b+s[a]*pow(10,a-1);
改为  b = b * 10 + s[a];
这样就回避了数据格式的问题。尝试一下。
 
关于C语言乘方运算的问题
浏览次数:1154次 悬赏分:40 | 解决时间:2011-2-8 04:05 | 提问者:茶香竹息汉堡 | 检举
我是是用math.h中的pow进行乘方运算的。但是在10的乘方的运算中有时会遇到一些问题。e.g. pow(10,2)得到的结果是99
请大虾们解释下原因,还有解决办法,急!
非常感谢

问题补充:

好的吧,是bcd转化成int时候用的
int bcd_decode(char *s){
 int a,b,c;
 a=s[0];
 printf("%d\n",a);
 b=0;
 for(a;a>0;a--){
 b=b+s[a]*pow(10,a-1);}
 return b;

}
还有不一定是pow(10,2)的时候有问题,总之10的乘方肯定是有错的
这个就是decode的全部内容啊,bcd是把一个数组转换成一个数字,就这样
然后直接调用这个function就行了
整个程序太长,贴不上来。那可能就是整形的问题吧,怎么改正呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值