2015-09-04 177 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++; 
} 

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

其他副作用示例包括從流(例如文件或網絡接口)讀取,副作用是您正在移動文件上的位置,或從網絡緩衝區中消耗數據。

副作用本身並不壞。你只需要注意它們,如果你介紹它們,把它們記錄在函數名中。說清楚它會修改某些狀態。

相關問題