C语言中单精度和双精度浮点型数据的数值范围是多少?怎么算出来的?请大虾帮忙了!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中单精度和双精度浮点型数据的数值范围是多少?怎么算出来的?请大虾帮忙了!相关的知识,希望对你有一定的参考价值。
C语言中单精度和双精度浮点型数据的数值范围是多少?怎么算出来的?请大虾帮忙了!如题,最好能给出详尽的解释,谢谢大虾了!
今天看书也是发现了这个问题但是百度一番网上并没有想要的答案,思索后得出结果,首先浮点型是32位精度 有一个符号位8个指数位23个尾数位
关于精度的计算单精度8位阶码,1位符号,剩下23位尾数,算出2的负23次方,得到0.00000011920928955078125
前面0有多少个,就表示能精确到那一位,所以精度为6提供七位有效数字
双精度11位阶码,1位符号,剩下52位尾数,算出2的负52次方,得到0.00000000000000022204460492503130808472633361816
所以精度为15,提供16位有效数字。
然后关于范围的计算:范围是指数位控制的,指数位为8,有效为为7(这里涉及到余码,有兴趣的同学可以查看相关资料)所以最大范围为2^7=128 这里是指数部分 化为十进制则为
2^128=3.402823669384635E38
所以范围为3.4E-38~3.4E+38
double同理
参考技术A float(单精度说明符),double(双精度说明符)单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。 参考技术B TypeMinimum value
Maximum value
float
1.175494351 E – 38
3.402823466 E + 38
double
2.2250738585072014 E – 308
1.7976931348623158 E + 308
MSDN上都有
float 4字节32位,1符号位,8位的指数位,再加上23位尾数
double 8字节64位,1符号位,11位指数,52位尾数 参考技术C 根据“字节”算出来的啊
4个字节的2进制,与8个字节的2进制,表示的范围、数字大小、明显不一样, 参考技术D float的有效数字是6~7位,double的有效数字是15~16位。。。是怎么算出来的?
浮点型数据的精度是啥意思
浮点型数据的精度即使用多少位来存储。
一个浮点数a由两个数m和e来表示:a = m × b^e。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。
单精度浮点数用4字节存储,双精度浮点数用8字节存储,分为三个部分:符号位、阶和尾数。阶即指数,尾数即有效小数位数。单精度格式阶占8位,尾数占24位,符号位1位,双精度则为11为阶,53位尾数和1位符号位。
扩展资料:
浮点数的相关存储格式:
IEEE754标准中浮点数表示格式IEEE规定的浮点数表示法是一种科学计数法,用符号(正或负)、指数和尾数来表示,底数被确定为2。也就是说浮点数被表示为尾数乘以2的指数次方再带上符号。
符号域:符号域占1位,0表示正数,1表示负数。指数域:指数域共有8位,可表达的范围为:0~255。为能处理负指数,实际指数位存储在指数域中值减去一个偏移量(单精度为127,双精度为1023)。
单精度浮点数的偏移量为127,故实际可表达的指数值的范围为-127~128。尾数域:尾数域共有23位。
参考资料来源:百度百科-浮点数
参考资料来源:百度百科-单精度
参考资料来源:百度百科-浮点型数据
参考技术A浮点型数据的精度取决于浮点小数结构:
32位单精度浮点型数的二进制位的第0-22位为2进制小数尾值,决定了它的精度在2的负23次方,1/(2^23)=0.0000001
64位双精度浮点型数的二进制位的第0-52位为2进制小数尾值,决定了它的精度在2的负52次方,1/(2^52)=2.2e-16
扩展资料:
浮点数的相关存储格式:
IEEE754标准中浮点数表示格式IEEE规定的浮点数表示法是一种科学计数法,用符号(正或负)、指数和尾数来表示,底数被确定为2。也就是说浮点数被表示为尾数乘以2的指数次方再带上符号。
符号域:符号域占1位,0表示正数,1表示负数。指数域:指数域共有8位,可表达的范围为:0~255。为能处理负指数,实际指数位存储在指数域中值减去一个偏移量(单精度为127,双精度为1023)。
参考资料来源:百度百科-浮点数 (有理数)
参考技术B浮点型数据的类型有两种,一是单精度浮点数,二是双精度浮点数。
浮点型数据的精度取决于浮点小数结构:
32位单精度浮点型数的二进制位的第0-22位为2进制小数尾值,决定了它的精度在2的负23次方,1/(2^23)=0.0000001
64位双精度浮点型数的二进制位的第0-52位为2进制小数尾值,决定了它的精度在2的负52次方,1/(2^52)=2.2e-16
在文本框输出时
32位浮点型数有7位小数精度(十进制) .3333333
64位浮点型数有15位小数精度(十进制) .333333333333333
要超过这精度要求需要将数据类型定义为Decimal(VB6.0)数据类型,它有28位小数精度(十进制)
参考:
http://www.fmddlmyy.cn/text60.html
http://wenku.baidu.com/link?url=xl7cAlbK5r3z5g9w1UdJn5r0wMHzIR3K2svZiFEeX2oDjusyptfIRiFAYFGsABaRFIw-Bip7My_u-S6-HhgCYilP9ZcuerJ-MYcuoRnR_63
参考技术C 浮点型数据又称单精度浮点数,精度表示的是该浮点数的取值范围。。。单精度类型:+-3.4*10^(-38)~~~+-3.4x10^38 单精度占用4个字节的内存
双精度类型:+-1.7*10^(-308)~~~+-1.7*10^308 双精度占用8个字节的内存本回答被提问者采纳 参考技术D 就是你数值的取值范围,单精度的取值范围比双精度的要小
以上是关于C语言中单精度和双精度浮点型数据的数值范围是多少?怎么算出来的?请大虾帮忙了!的主要内容,如果未能解决你的问题,请参考以下文章