我正在使用引腳工具來模擬處理器並出現一個非常奇怪的問題。 在下面的代碼片段中,多次調用Router :: Evaluate()。在被稱爲數百萬次之後,在第一個IF語句中「_cycles!= 0」被評估爲true,並且在緊隨其後的IF語句中爲false,並且落入ELSE塊中時,會間歇性地發生奇怪的行爲。C++和引腳工具 - 非常奇怪IF語句的DOUBLE變量問題
void Router::Evaluate()
{
//---------debug print code---------
if (_cycles != 0) {
cout << "not a zero" << endl;
if (_cycles != 0) cout << "---not a zero" << endl;
else cout << "---zero" << endl;
}
//----------------------------------
_cycles += _speedup;
while (_cycles >= 1.0) {
_Step();
_cycles -= 1.0;
}
}
//class definition
class Router : public TimedModule {
Protected:
double _speedup; //initialized to 1.0
double _cycles; //initialized to 0.0
...
}
下面是其中「不是零」後面的代碼的輸出「---零」是從時間打印出到時間看似隨機。
not a zero
---zero
(...some other output...)
not a zero
---zero
(...some other output...)
這怎麼可能發生?這不是一個多線程程序,所以同步不是問題。該程序使用gcc4.2.4編譯並在32位CentOS上執行。有人有線索嗎? 謝謝。
- 添加---
我應該提到這一點。我曾嘗試每次打印_cycles的值,它始終是0.0,這應該是不可能的... 我還使用了下列g ++選項:「-MM -MG -march = i686 -g -ggdb -g1 - 鰭線,功能-O3 -fPIC」
您是否嘗試在每種情況下打印'_cycles'的值?它可能會給你一個線索 – Useless 2012-08-06 18:11:58
你是否將任何特殊選項傳遞給編譯器? – DanielKO 2012-08-06 18:12:03
'_speedup'的價值是什麼?它是一個整數嗎? – 2012-08-06 18:12:27