Problems About Rearrangement for Expressions in C

一些数学法则(如:结合律,分配律等)在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个表达式会溢出,而原表达式不会。

你可能感兴趣的:(Problems About Rearrangement for Expressions in C)