当前位置:  技术问答>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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 新手如何加入开源项目 有什么好的c++,java 开源适合新手 请指点!
  • JDBC的问题,新手高手都来看看吧,说不定能帮帮我这个新手呢,谢谢!
  • 想找共同学习Linux的新手,一起学习,共同成长
  • 新手关于驱动开发的疑问
  • 新手有关linux的问题!
  • 新手急求~~~~~~~~~~~~~~~~~~~
  • 新手学习该用哪个版本
  • 面向新手的终端辅助工具 Clicompanion
  • 我是个新手,请各位老兄给介绍基本好书?
  • 新手请教啦~~能不能帮忙推荐几本书
  • 我是新手
  • 新手:用WEB页面修改数据库中的表?
  • Java新手上路之问题
  • 我是一名新手,请问如何学java
  • (新手)这里怎么看到300篇以外的所有文章?(不是搜索)
  • 新手求助!
  • 新手上路,怎样判断网卡是否安装成功?
  • !!新手求救!!
  • 新手在此多谢了:SUN的宠物商店
  • 新手请教,我用VI时按ESC键,总是回嘟嘟嘟嘟响,请问如何去掉!谢谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3