
C语言里float类型变量问题
我知道C语言中,float类型的变量在储存时会造成偏差,但是这个偏差具体是怎么产生的呢?能否通过理论计算得到呢?比如:floatx=67.5678;printf("%f\...
我知道C语言中,float类型的变量在储存时会造成偏差,但是这个偏差具体是怎么产生的呢?能否通过理论计算得到呢?比如:float x=67.5678;printf("%f\n",x);就会得到67.567802,我尝试过了,这里的偏差02是固定的,无论哪一台计算机运行得到的都是这个结果,那是不是意味着这个偏差值可以被计算。我在MSDN查到了具体的解释,但是看不太懂,求大神解释一下附上MSDN的解释:
展开
1个回答
2016-06-11
展开全部
偏差都是02,这个说法肯定不对,最多是在你给的这个数(67.5678)的时候,换个数,偏差就变了;例如:float x = 119080099.29; 实际打印出来是119080096.00
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,精度6位,不同的编译器规定不同,有些是7位,有些8位
double尾数52位,2^52=4.5E15,精度15位,所以double的有效位数是15位
更多追问追答
追问
我知道换个数就变了啊,可是不换数却总是这个偏差
如果考试的时候考这种的填空题,怎么办呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询