2015-09-04 166 views
-3

这里是我的代码的一部分:不同的结果与相同参数

double interf1 = interf(ppp, numberOfPoints); 
printf("interf (%e,%e)\n", interf(ppp,numberOfPoints), interf1); 

的问题是,当我打印的interf1interf(ppp, numberOfPoints)值我得到不同的结果。

对此有任何解释吗?

+6

什么是'interf'的声明? – Barmar

+2

输出是什么? – OldProgrammer

+3

“这是我的代码的一部分:”如何提供一个演示行为的完整示例。 – weston

回答

0

我会说是的,这是一个解释(但问题严重缺乏适当的信息,任何人都可以真正指出它)。

方法interf有一些内部可变状态或依赖于其他数据之间的调用之间的变化。

或者,可能pppnumberOfPoints的值在呼叫间发生变化,但这种可能性要小得多。考虑到这里的上下文,这将涉及多线程。

2

这可能是side effect的症状。

这是interf一个实现,它具有副作用的一个简单的例子:

int z; 

double interf(int p, int n) { 
    return z++; 
} 

每个呼叫,即使使用相同的值返回不同的结果。

其他副作用示例包括从流(例如文件或网络接口)读取,副作用是您正在移动文件上的位置,或从网络缓冲区中消耗数据。

副作用本身并不坏。你只需要注意它们,如果你介绍它们,把它们记录在函数名中。说清楚它会修改某些状态。

相关问题