gpt4 book ai didi

c++ - 奇怪的浮点异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:35:02 24 4
gpt4 key购买 nike

经过一些更改后,我在大型应用程序中遇到了一个浮点异常。我尝试评论我的更改,发现当我启用一个简单的函数调用时会发生 FPE。

api::getMaxSize();

它只是返回值。看起来像这样

int api::getMaxSize() { return 536870912; };

这是静态成员函数。当我将其移至头文件时,一切正常。我很困惑,这可能是什么原因?看起来 API 在另一个模块中并作为动态库链接,但这怎么会导致问题呢?

已添加

函数 maxBox() 是模板,在 api.h 头文件中实现。此函数调用 getMaxSize()

template <typename T>
static rectangle<T> maxBox()
{
return rectangle<T>(
getMinSize(), getMinSize(),
getMaxSize(), getMaxSize()
);
}

调用代码如下

if (!api::maxBox<double>().contains(box * scale)) { /* api::getMaxSize(); */ }

如果我启用 getMaxSize() 调用程序开始抛出 FPE,但实际上从未调用 getMaxSize()。

已添加box * scale 中找到 FPE,无法理解为什么它在没有 getMaxSize() 调用的情况下工作,但是问题已解决。感谢大家。

提前致谢。

最佳答案

浮点异常(实际上是信号)的产生有多种原因。主要有:

  • 你用一个整数除以零
  • 有符号整数的操作溢出(无符号整数必须在 C 和 C++ 中静默回绕)。

如您所见,它们与 float 无关!该名称是历史名称,如果不破坏大量源代码就无法更改(SIGFPE 中有一个常量 <signal.h>)。

可以在这里GetMaxSize返回一个不能用 int 表示的值.

关于c++ - 奇怪的浮点异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6069575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com