浮点运算处理当中的一些“坑”,持续更新
本文主要记录了浮点运算处理当中的一些“坑”,持续更新...
(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;
}