当前位置: 技术问答>linux和unix
=新手处贴=冰天雪地裸体跪问=linux下 ecvt()下的1个迷惑问题.
来源: 互联网 发布时间:2016-01-08
本文导语: 新手 学习函数,在ecvt()发现1个迷惑的问题 ecvt. 解释是:将浮点数据转换成字符串,取四舍五入. =====我的环境是vmware下的虚拟linux red hat9.0,平时运行程序都很正确======== 原形:char *ecvt(double num,int ndigis,int *decpt,int *sign); 我...
新手 学习函数,在ecvt()发现1个迷惑的问题
ecvt. 解释是:将浮点数据转换成字符串,取四舍五入.
=====我的环境是vmware下的虚拟linux red hat9.0,平时运行程序都很正确========
原形:char *ecvt(double num,int ndigis,int *decpt,int *sign);
我做 :分几次改,改完再gcc,再./执行
double a=555555 c=ecvt(a,5,&decpt,&sign)
打印:decpt=6 c=55556
double a=555.555 c=ecvt(a,5,&decpt,&sign)
打印:decpt=3 c=55555(??)
double a=555.559 c=ecvt(a,5,&decpt,&sign)
打印:decpt=3 c=55556
double a=5555.55 c=ecvt(a,5,&decpt,&sign)
打印:decpt=4 c=55556
第2次 为什么是55555而不是55556的输出....而5555.55/5555.55/55555.5/
55.5555/5.55555/0.555555都是55556的输出..........注意看好了!!!!!!!!!
不解?????为什么???????
是redhat de bug还是vmware的bug?还是函数没学懂??????? >
|
内存里浮点数都最用二进制表示的,编译器会把你用10进制写在源程序中的浮点数转换成二进制浮点数格式存到内存里,这时就可能有一次精度的损失,中间被ecvt作过一次转换,最后又从2进制化成10进制字符串在屏幕上显示出来,于是又可能有一个精度损失。
|
你换个平台试试看,如果还不行,那应该是跟符点数的精度问题有关。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!