C#浮点类型

单精度:取值范围在正负1.5*10-45到3.4*10-38之间,精度为7位数;
双精度:取值范围在正负5.0*10-324到1.7*10-308之间,精度为15到16位数。
初学C#者求教,求高手帮忙讲解下看单精度和双精度的的取值范围到底是怎么看的,自己很难理解他的取值范围!!!
精度我理解为是说保留小数点后面最高有几位,但既然精度已经限定了小数点后面有几位,那前面那个取值范围好像不只7位吧,感觉很纠结啊!我数学不是很差,看这个着实有点晕!!
更正:书上是
单精度:取值范围在正负1.5*10-45到3.4*10+38之间,精度为7位数;
双精度:取值范围在正负5.0*10-324到1.7*10+308之间,精度为15到16位数。
不好意思,上面写错了

float占用4个字节,和int一样,也就是32bit.
double占用8个字节,也就是64bit.
float在内存中的存储方式为:1bit(符号位) 8bits(指数位) 23bits(尾数位),于是,float的指数范围为2^8也就是-128~128之间,所以float的范围是-2^128~2^128.
double在内存中的存储方式为:1bit(符号位) 11bits(指数位) 52bits(尾数位),于是,float的指数范围为2^8也就是-128~128之间,所以float的范围是-2^128~2^128.
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496 , 一共16位 , 这意味着最多能有16位有效数字,但绝对能保证的为15位,也即float的精度为15~16位有效数字;
我在自学C# 翻了很多论坛 各个扫盲贴的表述都不太一致 , 我觉得我的这个理解是正确的 , 希望能帮到各位 , 也欢迎各位大牛批评指正 .最后祝大家越来越牛 , fighting !!!
顺便留个坑 decimal类型的存储方式又是怎样的????望各位大牛回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-12
错了吧?
单精度:取值范围在正负1.5*10-45到3.4*10-38之间,精度为7位数;
双精度:取值范围在正负5.0*10-324到1.7*10-308之间,精度为15到16位数。

float 32 3.4E–038~3.4E+038
double 64 1.7E–308~1.7E+308
你从哪里看的是1.5*10-45到3.4*10-38 和 5.0*10-324到1.7*10-308
你的这个范围肯定是错误的,正值和负值的范围肯定一样,符号位的0和1表示正负.所以,正值和负值的最大范围肯定要一样,你先确定你的数据对不对我在告你浮点是这么表示的,

如果你是要问是为什么是:1.5*10-45到3.4*10-38 和 5.0*10-324到1.7*10-308
我给你的答案是:肯定是你看的书印刷错误.
第2个回答  推荐于2016-01-24
取值范围没什么难理解的啊,就是他写的那个范围。估计你的理解就是精度问题。
首先,精度不是单纯从小数点后开始算的,个人理解,精度应该和数学里的有效数字差不多,就是“从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字”
那么,这样就很容易理解7位精度怎么能表示这么大的范围了。±1.5e−45 到 ±3.4e38
比如这个数,1.5e-45,就是1.5乘以10的-45次方,他的有效数字就是2(1.5,1和5,后面的幂不算的).
个人理解,希望对你有帮助!本回答被提问者和网友采纳
第3个回答  2015-11-22
  下表显示了浮点型的精度和大致范围。

  类型 大致范围 精度

  float 1.5e−45 到 ±3.4e38 7 位

  double ±5.0e−324 到 ±1.7e308 15 到 16 位
  

  
相似回答