浮点运算处理当中的一些“坑”,持续更新

本文主要记录了浮点运算处理当中的一些“坑”,持续更新...

(1)浮点在内存中值并不是精确的值

我们来看看看下面这段代码:

int main(int argc, char *argv[])
{
    int i = 0;
    float x = 1.4;
    
    x = x - (int)x;
    i = (int)(x * 10);
    return 0;
}

请问这段代码中i的结果为多少?

答案为i = 3,并不是你认为的i = 4。为什么呢?
在计算机组成原理中,浮点数无法被准确地表示出来, 只能是一个非常精确的值。所以在上述程序中x的值在内存中并不是精确的1.4, 实际上可能是1.39999999...

解决办法:

int main(int argc, char *argv[])
{
    int i = 0;
    double x = 1.4;
    
    x = x - (int)x;
    i = (int)(x * 10 + 0.000005);
    return 0;
}
posted @ 2017-06-09 09:11  Chan-j  阅读(336)  评论(0编辑  收藏  举报