Я компилирую свой код с помощью следующей команды:
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
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 (). Есть ли что-то в булевой алгебре, которую я не понимаю, или что-то, что работает в С ++ иначе, чем я знаю? Любые идеи, почему это вызывает исключение?
Спасибо,
Христо