使用vc++6.0和谭浩强的C语言书,double型占8个字节,有15位有效数字,为什么能表示到1.7*10^308

按道理,在计算机里按二进制存放,就算8个字节都来存放整数部分,最多也只能存放到2^64=1.8*10^19,这个数明显比1.7*10^308小很多,而且书里写的数值范围是0以及2.3*10^-308到1.7*10^308,为什么是这个2.3*10^-308到1.7*10^308的范围,可以告诉我double型是怎么存的吗?

第1个回答  2013-04-24
好像double的是1.7存一个地方,10存一个地方,308存一个地方!不是说每一位就代表1和0!是需要把1.7和10,和308运算一下得到结果!!
第2个回答  2013-04-24
数符(s) 阶码(E) 尾数(M) 总位数 十六进制
短实数(Single,Float) 1位 8位 23位 32位 0x7FH +127
长实数(Double) 1位 11 位 52位 64位 0x3FFH +1023
临时实数(延伸双精确度, 1位 15位 64位 80位 0x3FFFH +16383

★ S(sign)表示N的符号位。对应值s满足:n>0时,s=0; n<0时,s=1。
★ E(exponent)表示N的指数位,位于S和M之间的若干位。对应值e值也可正可负。
★ M(mantissa)表示N的尾数位,恰好,它位于N末尾。M也叫有效数字位(significand)、系数位(coefficient), 甚至被称作"小数"。

http://baike.baidu.com/view/1388812.htm
第3个回答  2013-04-24
浮点数的存储方式和普通的整型数不同,解释起来很费时,建议lz去查一下IEEE 754 标准,这个是使用的最广泛的浮点数标准了,看懂这个就可以理解了本回答被提问者和网友采纳
相似回答