转自http://blog.sina.com.cn/s/blog_6ebd49350101gdgo.htmlIEEE754浮点数的表示方法。C语言里对float类型数据的表示范围为-3.4*10^383.4*10^38。double为-1.7*10^-308~1.7*10^308long double为-1.2*10^-4932~1.2*10^4932.类型比特位数有效数字数值范围float326~7-3.4*10^383.4*10^38double6415~16-1.7*10^-308~1.7*10^308long double128/18~19-1.2*10^-4932~1.2*10^4932究竟如何计算该范围分析如下对于单精度浮点数float来说符号位一位指数位8位尾数23位。指数能够表示的指数范围为-128~127。尾数为23位。float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的其整数部分始终是一个隐含着的“1”由于它是不变的故不能对精度造成影响。float2^23 8388608一共七位这意味着最多能有7位有效数字但绝对能保证的为6位也即float的精度为6~7位有效数字double2^52 4503599627370496一共16位同理double的精度为15~16位。其中负指数决定了浮点数所能表达的绝对值最小的非零数而正指数决定了浮点数所能表达的绝对值最大的数也即决定了浮点数的取值范围。float的范围为-2^128 ~ 2^128也即-3.40E38 ~ 3.40E38double的范围为-2^1024 ~ 2^1024也即-1.79E308 ~1.79E308。以float为例如下表符号尾数指数23数符-小数部分决定精度-127~128 指数决定范围例如1.1111111111111111111111*2^127小数点后面23个1由于尾数的范围12其最高位总为1故只需存取小数部分所以小数为是23位1约等于2*2^1273.4*10^38。为3.4*10^38负数亦然。Double的计算与此类似double的符号位为63位指数为6252位共11位。表示的范围为-10241023。尾数为510。表示的范围为1.1111111111111111..11111*2^1023小数点后面52个1为1.7*10^308。负数亦然。