问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言pow函数用法(c语言pow函数实现方法)

发布网友 发布时间:2024-08-19 11:08

我来回答

1个回答

热心网友 时间:2024-08-29 04:33

pow函数是C语言标准库中自带的一个计算函数,其接口存在于math.h文件中,所以使用前要先包含math.h文件。该函数用途是计算x的y次方,并将结果返回给用户,直接调用非常方便。在TC2.0中其原型为extern float pow(float x, float y); ,而在VC6.0中原型为double pow( double x, double y )。
VC6.0中的代码实现:
pow函数使用范例
可以看到计算结果符合预期,但是最近在用MSP430做远程升级时遇到了这样一个问题:
升级前平台会发送一帧升级包的描述信息,其中包含总帧数,用可显字符来表示,例如要传输的总帧数是167帧,那么表示就是''167'',我需要将其转换成167并存储,根据其规律我先想到了用pow函数来解决,也就是a * 100 + b * 10 + c的思路,但是计算出来的结果总为166,从而导致升级一直不成功,真是百思不得其解。
后来仔细研究了一下pow函数的实现,终于发现问题所在,pow函数由于参数和返回值都是double类型,其在计算机内存中表示方式本身就是一种近似,存在一定表达误差,比如100.0在内存中可能用99.999999来表示,而其转换为unsigned int类型时会导致精度丢失,造成转换结果为99。
找到问题的原因所在就好解决了,针对这个特点我们可以采取四舍五入的办法,比如可以在结果的基础上加一个很小的常量值 const double eps = 1e-6; 还可以用round函数直接进行四舍五入。
另外这还和编译器有很大的关系,有的编译器能保证计算结果正确,而像我使用的IAR自带的编译器就不行了。类似的标准库中很多函数如三角函数也会存在这个问题,所以大家在使用pow函数时要十分慎重,尤其是将结果往整数转换时。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在五粮液000858可以买进么? 2021年五粮液(000858)总资产、总负债、营业收入、营业成本及净利润统... 手机耗电太快了怎么解决 教你方法,轻松解决 Tag模块数组indexOf,splice的使用方法 JavaScript indexOf简介 对于一个JS对象数组怎么使用IndexOf方法得到索引呢? Array.indexOf() 学习 狼来了是什么效应 当两种刺激都出现,认知者会产生首因效应还是近因效应呢? 大过年的…… c语言pow 请问这是北京市朝阳区哪所学校的校服 我就想问一下,现在在哪还能看到 赛罗奥特曼 超决战 贝利亚银河帝国,不... 有什么制作面包蟹的视频教程分享? 在理想情况下(纯理论上)机械硬盘、固态硬盘、混合硬盘哪个最长寿耐用... 固态硬盘的寿命一般多长时间 wegame饥荒模组怎么添加 茶叶的好坏如何辨别 怎样辨别茶叶品质的好坏呢 好茶叶怎么区分,辨别茶叶的好坏最简单方法 如何鉴别茶叶的质量 如何发现好的茶叶品质 怎么看茶叶的品质 怎么判断茶叶的品质? 茶叶的质量认识 公安取保候审最快几天放人 办理取保候审最快几天放人 取保候审材料最快几天放人 取保候审最短多久可以放人 一般取保程序走完要几天可放人 终极赛罗大乱斗 哪些情况劳动合同终止 退休金和职称的关系是怎样的 职称跟退休金有关系吗 生死狙击天神怎么变魔神 生死狙击天神变魔神方法简述 西安朝古都是哪十三朝 幽默押韵简短句子 最里面的大牙都烂没了怎么办 牙齿都烂掉了怎么办 14岁嘴里烂了10个牙 牙齿烂了一半,里面都空了怎么办 传媒专业解析与就业分析 房子还在还贷款,房产证写的老公名字,现在改女儿名字怎么办 台风14号 帕卡 27号什么时候登陆 江门8月27号帕卡台风几点登陆登陆 台风"帕卡"将于27日哪个时间段登陆 遇到打工讹钱怎么办? 2024北海海底世界开放时间 预备役军官生活补贴新规定是什么? 贵州交通事故伤残赔偿标准2024年是怎样规定的 有不用服役的军官吗? 苍蓝战士奥特曼电影在哪里看