以下是我的代码的一部分:
double interf1 = interf(ppp, numberOfPoints);
printf("interf (%e,%e)\n", interf(ppp,numberOfPoints), interf1);
问题在于,当我打印interf1
和interf(ppp, numberOfPoints)
的值时,我会得到不同的结果。
这有什么解释吗?
答案 0 :(得分:2)
这可能是side effect的症状。
这是一个带有副作用的interf
实现的简单示例:
int z;
double interf(int p, int n) {
return z++;
}
每次调用,即使使用相同的值,也会返回不同的结果。
其他副作用示例包括从流中读取(例如文件或网络接口),副作用是移动文件上的位置,或者从网络缓冲区中消耗数据。
副作用本身并不坏。您只需要了解它们,如果您介绍它们,请在函数名称中记录它们。明确它会修改一些状态。
答案 1 :(得分:0)
我会说是的,有一个解释(但这个问题严重缺乏适当的信息,任何人都可以真正解决它)。
方法interf
具有一些内部可变状态或对其他数据的依赖性,这些数据会在调用之间发生变化。
或者,可能会在调用之间更改ppp
或numberOfPoints
的值,但这种可能性要小得多。考虑到上下文,这将涉及多线程。