您的位置:首页 > 其它

Problems About Rearrangement for Expressions in C

2010-06-07 13:03 302 查看
一些数学法则(如:结合律,分配律等)在C语言表达式中通常是不适用的。

比如下面的代码段:

double x, y, z;
/* ... */
x = (x * y) * z;                     // not equivalent to x *= y * z;
z = (x - y) + y ;                    // not equivalent to z = x;
z = x + x * y;                       // not equivalent to z = x * (1.0 + y);
y = x / 5.0;                          // not equivalent to y = x * 0.2;


由于舍入与精度的问题,上面的表达式通常是不相等的。

又如:

int a, b;
/* ... */
a = a + 32760 + b + 5;


与下面的表达式也是不等的:

a = (a + b) + 32760;


假设int的表示范围是[-32768, +32767],则如果a = -32754, b = -15,则第2个表达式会溢出,而原表达式不会。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐