【发布时间】:2020-09-18 06:28:05
【问题描述】:
我有以下一段 c++ 代码:
void update(const int step, const int total) const
{
double s = static_cast<double>(step);
double t = static_cast<double>(total);
std::cout << s/t <<"------\n";
// etc...
}
我正在使用激活了 -fp-trap=all 标志的 intel c++ 编译器。通过 gdb 运行代码时出现以下错误:
Program received signal SIGFPE, Arithmetic exception.
0x000000000040ee07 in NilDa::progressBar::update (this=0x7fffffffbc9c, step=1, total=60000) at /home/d2d/dev/NilDa/sources/utils/progressBar.h:69
69 std::cout << s/t <<"------\n";
我真的不明白发生了什么。分工似乎很明确。
【问题讨论】:
-
输入是 step=1,total=60000(由 gdb 报告)因此 s=1.0, t=60000.0
-
此外,我们不知道何时何地调用此代码。一个简单的
main程序怎么样,只需将 1.0 除以 60000.0,看看这个简单的情况是否有问题。 -
@cigien 这些值在 gdb 输出中可见;) Dante:您使用哪个编译器?
-
PS 如果您使用的是 intel C++ 编译器,那么在这里快速查找将解决您的问题 (
Enables or disables the IEEE trap for invalid operation.):software.intel.com/content/www/us/en/develop/documentation/…