C#浮点类型
答案:4 悬赏:60 手机版
解决时间 2021-04-20 01:58
- 提问者网友:最爱你的唇
- 2021-04-19 12:32
C#浮点类型
最佳答案
- 五星知识达人网友:山河有幸埋战骨
- 2021-04-19 13:29
取值范围没什么难理解的啊,就是他写的那个范围。估计你的理解就是精度问题。
首先,精度不是单纯从小数点后开始算的,个人理解,精度应该和数学里的有效数字差不多,就是“从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字”
那么,这样就很容易理解7位精度怎么能表示这么大的范围了。±1.5e−45 到 ±3.4e38
比如这个数,1.5e-45,就是1.5乘以10的-45次方,他的有效数字就是2(1.5,1和5,后面的幂不算的).
个人理解,希望对你有帮助!
首先,精度不是单纯从小数点后开始算的,个人理解,精度应该和数学里的有效数字差不多,就是“从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字”
那么,这样就很容易理解7位精度怎么能表示这么大的范围了。±1.5e−45 到 ±3.4e38
比如这个数,1.5e-45,就是1.5乘以10的-45次方,他的有效数字就是2(1.5,1和5,后面的幂不算的).
个人理解,希望对你有帮助!
全部回答
- 1楼网友:话散在刀尖上
- 2021-04-19 15:33
下表显示了浮点型的精度和大致范围。
类型 大致范围 精度
float 1.5e−45 到 ±3.4e38 7 位
double ±5.0e−324 到 ±1.7e308 15 到 16 位
类型 大致范围 精度
float 1.5e−45 到 ±3.4e38 7 位
double ±5.0e−324 到 ±1.7e308 15 到 16 位
- 2楼网友:逐風
- 2021-04-19 14:50
错了吧?
单精度:取值范围在正负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
我给你的答案是:肯定是你看的书印刷错误.
单精度:取值范围在正负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
我给你的答案是:肯定是你看的书印刷错误.
- 3楼网友:西风乍起
- 2021-04-19 14:42
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类型的存储方式又是怎样的????望各位大牛回答
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类型的存储方式又是怎样的????望各位大牛回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯