C中的float和double的有效数字和精度各是多少?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C中的float和double的有效数字和精度各是多少?相关的知识,希望对你有一定的参考价值。
有效数字和精度是不是同一概念?
C中的float和double的有效数字和精度各是多少?
刚才有人说十进制表示的话就是:float->6位,double->16位。
怎么回事?
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 类型)。当您对浮点变量执行算术时,通常会出现提升。此算术始终以与具有最高精度的变量一样高的精度执行。
参考资料来源:百度百科——浮点型数据
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。 参考技术B float double
二进制有效位数 24位 53位
十进制有效位数 7位 15位 参考技术C float double
二进制有效位数 24位 53位
十进制有效位数 6或7位 15或16位
因为2进制转化到10进制不是整的1000或10000的那种...所以float6位7位都有,double15位16位都有。 参考技术D 准确来说是2^-15.
double尾数占52位,2^-52=2.2204460492503130808472633361816e-16,即2^-16,所以能够保证所有的15位精度。
以上是关于C中的float和double的有效数字和精度各是多少?的主要内容,如果未能解决你的问题,请参考以下文章