题27

题目

Q:假设已定义三个 int 型变量 xyzsizeof(int) = 4, double 型采用 IEEE 754 双精度浮点数格式,变量 dxdydz 的声明和初始化如下:

double dx = (double) x ;
double dy = (double) y ;
double dz = (double) z ;

则下列关系表达式中永远为真的是 ( ) 。
I. dx+dy = (double)(x+y) II. dx × dy >= 0
III. dx/dy = dy/dx IV. (dx+dy)+dz = dx+(dy+dz)
A. I 和 II B. II 和 III C. III 和 IV D. II 和 IV

分析

A:double可以完美表示int,同时,浮点数的加减法不会有溢出,整形的加减法会有溢出

  • I表达式分析
    • 非永真
    • x + y可能溢出
    • dx + dy不会溢出
  • II表达式分析
    • 永真
    • double型IEEE 754表示
    • 尾数原码小数
    • 符号和数值部分分开计算
    • 结果溢出不影响乘积符号
  • III表达式分析
    • 非永真
    • dx和dy中一个为0,另一个不为0时,不相等
  • IV表达式分析
    • 永真
    • dx, dy, dz由32位int型转换得到
    • double型精确表示int型
    • 对阶时尾数移动位数不超过52位
    • 尾数不会舍入
    • 不会发生大数吃小数情况

选D