本文介绍了漂浮在C奇怪IM precision错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

今天发生在我身上一个奇怪的东西,当我尝试编译并执行此code的输出是不是我的预期。这里是code,简单地浮动值添加到一个float数组,然后打印出来。
简单的code:

  INT的main(){
    浮 - [R [10];
    INT Z者除外;
    INT I = 34;
    对于(Z = 0; z,其中; 10; Z ++){
        我= Z * Z * Z;
         - [R [Z] =我;
         - [R [Z] = R [Z] 0.634;
        的printf(%F \\ N,R [Z]);
    }
}

输出:

  0.634000
1.634000
8.634000
27.634001
64.634003
125.634003
216.634003
343.634003
512.633972
729.633972

请注意从0.634后出现27数字,不应该存在。任何人都知道为什么会这样?这是造成浮点近似的事件吗?..

P.S我有一个Linux的Debian系统,64位

感谢所有


解决方案

一个数字可能重新在以下表格psented $ P $:

So there will be rounding or relative errors when the space is less in memory.

From wiki:

The IEEE 754 standard specifies a binary32 as having:

Sign bit: 1 bit
Exponent width: 8 bits
Significand precision: 24 bits (23 explicitly stored)

Edit (Edward's comment): Larger (more bits) floating point representations allow for greater precision.

这篇关于漂浮在C奇怪IM precision错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-15 04:44