《深入理解计算机系统》中的问题

我正在看《深入理解计算机系统》英文第二版,练习2.54不是很理解,作者说这道题目可以让人从程序员的角度提高浮点运算的能力,所以特此来求教。
题目是这样的:
int x;float f; double d;
f,d是除正无穷,负无穷,NaN外的任意数,x也是任意数。判断下列等式是不是恒成立。
(1)x==(int)(double)x
(2)x==(int)(float)x
(3)d==(double)(float)d
(4)f==(float)(double)f
(5)(f+d)-f==d
其中(1)(4)是正确的,求解释。

hzj -
感谢您为本话题评分。
共有1个回答
  • 0
    hzj - 2012-11-16 不喜欢

    我把题目前面的内容仔细看了下,是这么解释的。
    (1)int->double 保留精确的数值。
    (2)int->float 有可能溢出和被取近似,所以不对。
    (3)double->float 有可能取无穷和被近似,所以不对。
    (4)float->double 类似于int->double
    (5)浮点数之间的运算会被取近似,例如(3.14+1e10)-1e10=0,所以错

以下是预览效果,请确认排版好了再点回复。
如果你认为此话题有广告、灌水的嫌疑,请给此话题评一颗星。平均分低的话题将不会再显示。
良好的讨论氛围由大家共同维护。