我正在通过以下命令编译我的代码:
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++ 中的工作方式与我所知道的不同?任何想法为什么这会导致异常?
谢谢, 赫里斯托