C中的float和double的有效数字和精度各是多少?
有效数字和精度是不是同一概念?C中的float和double的有效数字和精度各是多少?刚才有人说十进制表示的话就是:float->6位,double->16位。怎么回事?...
有效数字和精度是不是同一概念?
C中的float和double的有效数字和精度各是多少?
刚才有人说十进制表示的话就是:float->6位,double->16位。
怎么回事? 展开
C中的float和double的有效数字和精度各是多少?
刚才有人说十进制表示的话就是:float->6位,double->16位。
怎么回事? 展开
8个回答
展开全部
float有效数字位为6 – 7位,字节数为4,指数长度为8位,小数长度为23位。取值范围为 3.4E-38~3.4E+38。
double有效数字位为15 – 16位,字节数为8,指数长度为11位,小数长度为52位。取值范围为1.7E-308~1.7E+308。
扩展资料
可根据应用程序的需求将变量声明为 float 或 double。这两种类型之间的主要差异在于它们可表示的基数、它们需要的存储以及它们的范围。如果存储比精度更重要,对浮点变量使用 float 类型。相反,如果精度是最重要的条件,则使用 double 类型。
浮点变量可以提升为更大基数的类型(从 float 类型到 double 类型)。当您对浮点变量执行算术时,通常会出现提升。此算术始终以与具有最高精度的变量一样高的精度执行。
参考资料来源:百度百科——浮点型数据
展开全部
float是32位,double是64位
float32位中,有1位符号位,8位指数位,23位尾数为
double64位中,1位符号位,11位指数位,52位尾数位
取值范围看指数部分
float是有符号型,其中,8位指数位,2^8=(-128—127),因此实际的范围是-2^128—2^127,约为-3.4E38—3.4E38
同理double范围约是-1.7E308—1.7E308,楼主可以自己按下计算器试试看,印象深些
精度是看尾数部分
float尾数位23位,2^23=8.3E6,7位,所以不同的编译器规定不同,有些是7位,有些8位
double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位
这是我个人的一点看法,纯手打,希望能帮到你
float32位中,有1位符号位,8位指数位,23位尾数为
double64位中,1位符号位,11位指数位,52位尾数位
取值范围看指数部分
float是有符号型,其中,8位指数位,2^8=(-128—127),因此实际的范围是-2^128—2^127,约为-3.4E38—3.4E38
同理double范围约是-1.7E308—1.7E308,楼主可以自己按下计算器试试看,印象深些
精度是看尾数部分
float尾数位23位,2^23=8.3E6,7位,所以不同的编译器规定不同,有些是7位,有些8位
double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位
这是我个人的一点看法,纯手打,希望能帮到你
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
float double
二进制有效位数 24位 53位
十进制有效位数 6或7位 15或16位
因为2进制转化到10进制不是整的1000或10000的那种...所以float6位7位都有,double15位16位都有。
二进制有效位数 24位 53位
十进制有效位数 6或7位 15或16位
因为2进制转化到10进制不是整的1000或10000的那种...所以float6位7位都有,double15位16位都有。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
float和double是有IEEE标准的,不是C语言定的,其它语言也一样。
double型90%的情况下有效位是16位的10进制数据是对的。来一段lua程序:
local b= 9007199254740991
print("b="..string.format("%d", b))
for i=1,10 do
print("i="..i..",b+i="..string.format("%d", b+i))--打印的全是偶数
end
for i=1,10 do
print("i="..i..",b-i="..string.format("%d", b-i))--打印正确
end
由此可见,大于9007199254740991(2进制52位最大的数),从2^53开始误差就大于1。
double型90%的情况下有效位是16位的10进制数据是对的。来一段lua程序:
local b= 9007199254740991
print("b="..string.format("%d", b))
for i=1,10 do
print("i="..i..",b+i="..string.format("%d", b+i))--打印的全是偶数
end
for i=1,10 do
print("i="..i..",b-i="..string.format("%d", b-i))--打印正确
end
由此可见,大于9007199254740991(2进制52位最大的数),从2^53开始误差就大于1。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询