我通過以下命令編譯我的代碼浮動例外:使用ICC編譯
icc -ltbb test.cxx -o test
然後,當我運行程序:
time ./mp6 100 > output.modified
Floating exception
4.871u 0.405s 0:05.28 99.8% 0+0k 0+0io 0pf+0w
我得到一個「浮動的例外」。在C++此以下是代碼,我異常之前和之後有:
// before
if (j < E[i]) {
temp += foo(0, trr[i], ex[i+j*N]);
}
// after
temp += (j < E[i])*foo(0, trr[i], ex[i+j*N]);
這是布爾代數...所以(j < E [I])要麼將是一個0或1,因此乘法會導致0或foo()結果。我不明白爲什麼這會導致浮動異常。 這是FOO()的作用:
int foo(int s, int t, int e) {
switch(s % 4) {
case 0:
return abs(t - e)/e;
case 1:
return (t == e) ? 0 : 1;
case 2:
return (t < e) ? 5 : (t - e)/t;
case 3:
return abs(t - e)/t;
}
return 0;
}
FOO()不是我寫的,所以我也不太清楚,什麼它的功能...但我不認爲這個問題是與函數foo()。有沒有關於布爾代數的東西,我不明白,或者在C++中的作用與我所知的不同?任何想法爲什麼這會導致異常?
感謝, 斯托伊奇
你是什麼意思「浮動異常」?請發佈確切的錯誤消息。 – 2010-05-02 04:59:36
是'i','j','N'等所有整數? – Gabe 2010-05-02 05:01:59
@加貝。是的,他們都是整數。 @Marcelo。這就是我擁有的所有信息。這是打印到終端的唯一的東西。 「浮動異常」。 – Hristo 2010-05-02 05:06:34