TOP

[转载]为什么使用%lf读取double型的值,而用%f进行显示?(一)
2017-10-11 15:46:56 】 浏览:10201
Tags:转载 为什么 使用 %lf 读取 double 而用 进行 显示

博客地址:http://blog.csdn.net/shenzhou111/article/details/7826444

今天看到一篇好文章,mark一下。

出去旅游了一下,所以有些天没敲代码,于是又弱爆了~忘掉了题目中的东西,结果出现了问题,好难找哈~

死记硬背是很难记住一些东西的,只有理解原理才记得深入!

注意scanf函数和printf函数是不同寻常的函数,因为它们都没有将函数的参数限制为固定数量。scanf函数和printf函数又可变长度的参数列表。当调用带可变长度参数列表的函数时,编译器会安排float参数自动转换成为double类型,其结果是printf函数无法区分float 型和double型的参数。因此在printf函数调用中%f既可以表示float型又表示double型的参数。

      另一方面,scanf函数是通过指针指向变量的。%f告诉scanf函数在所传地址位置上存储一个float型值,而%lf告诉scanf函数在所传地址位置上存储一个double型值。这里float和double的区别是非常重用的。如果给出了错误的转换说明,那么scanf函数将可能存储错误的字节数量(没有提到的是,float型的为模式可能不同于double型的位模式)。

       另外历史原因C语言中浮点计算一直采用双精度的形式。

       附录说明:IEEE浮点标准的两种主要的浮点数格式:单精度(32位)和双精度(64位)。数值以科学计数法的形式存储,每一个数都是由3部分组成:符号、指数和小数。

EEE754浮点标准


EEE754标准在表示浮点数时,每个浮点数均由三部分组成:符号位S,指数部分E和尾数部分M。
我们知道10进制数的科学计数法如A= -3.5×105
这里最前面有一个负号,3.5是尾数,两个有效数字,后面以10为基数的指数为5。
我们可以将它表示为 -3.5E5
同样,二进制数也可以用科学计数法规格化表示,比如5这个数,如果用二进制表示的话,整型为101,如果用科学计数法则可以表示为 1.25×24 ,这里用的是十进制,将尾数换成二进制就是1.01(就是101向前移两位小数点,和十进制完全相同),后面的指数4换成二进制则是10,那我们将其用二进制的科学计数法就可以写成1.01E10。
当我们依照这种计数法给一个数字确定其精度(有效位)后,就可以用一定长度的1和0的位串来表示一个实数了。
浮点数一般采用以下四种基本格式:
(1)单精度格式(32位):除去符号位1位后,E占8位,M占23位。
(2)扩展单精度格式:E>=11位,M31位。
(3)双精度格式:(64位);E=11位,M=52位。
(4)扩展双精度格式:E>=15位,M>63位。
我们最重要的是掌握单精度格式的表示法。在IEEE754标准中,约定小数点左边隐含有一位,通常这位数就是1,这样实际上使尾数的有效位数为24位,即尾数为1.M。指数的值在这里称为阶码,为了表示指数的正负,所以阶码部分采用移码表示,移码值为127,阶码值即从1到254变为-126至+127,在 IEEE754中所有的数字位都得到了使用,明确地表示了无穷大和0,并且还引进了"非规格化数",使得绝对值较小的数得到更准确表示。请看下表:
S(1位)      E(8位)             M(23位)             N(32位)  
符             0                 0            (-1)S·2E-127·(1.M) 为规格化数                                     
              0              不等于0       (-1)S·2-126·(0.M) 为非规格化数
号        1到254之间          不等于0       (-1)S·2E-127·(1.M) 为规格化数
             255             不等于0     NaN(非数值)
位            255                 0            无穷
[转载]为什么使用%lf读取double型的值,而用%f进行显示?(一) https://www.cppentry.com/bencandy.php?fid=45&id=139729

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言学习笔记(一):数组传递时.. 下一篇Opencv实现的简易绘图工具