C语言里float类型变量问题

我知道C语言中,float类型的变量在储存时会造成偏差,但是这个偏差具体是怎么产生的呢?能否通过理论计算得到呢?比如:floatx=67.5678;printf("%f\... 我知道C语言中,float类型的变量在储存时会造成偏差,但是这个偏差具体是怎么产生的呢?能否通过理论计算得到呢?比如:float x=67.5678;printf("%f\n",x);就会得到67.567802,我尝试过了,这里的偏差02是固定的,无论哪一台计算机运行得到的都是这个结果,那是不是意味着这个偏差值可以被计算。我在MSDN查到了具体的解释,但是看不太懂,求大神解释一下附上MSDN的解释: 展开
 我来答
匿名用户
2016-06-11
展开全部
  1. 偏差都是02,这个说法肯定不对,最多是在你给的这个数(67.5678)的时候,换个数,偏差就变了;例如:float x = 119080099.29;  实际打印出来是119080096.00

  2. float、double变量有偏差,我觉得你没必要关心。不同编译器会不一样。

  3. 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位

更多追问追答
追问
我知道换个数就变了啊,可是不换数却总是这个偏差
如果考试的时候考这种的填空题,怎么办呢?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式