所以我正在为这个基本的方形函数使用预处理宏:
#define SQUARE(a) a*a
然后传递给这些函数,分别执行这些任务:
double f(double x) {
return SQUARE(x);
}
double g(double x) {
return SQUARE(1-x);
}
double h(double x) {
return 1/SQUARE(x);
}
使用这些函数,对于g(x)和h(x)我得到的结果如下:
g(2) = -3, h(2) = 1
g(3) = -5, h(3) = 1
g(4) = -7, h(4) = 1
etc...
我已经更改了功能以获得预期的结果,但我很好奇上面的函数中发生的事情给我带来了如此奇怪的结果?
答案 0 :(得分:1)
SQUARE(1-x)
将扩展为1-x*1-x
,这根本不正确。
使用函数而不是宏会好得多。函数只评估参数一次。
double square(double a)
{ return a * a; }