2

执行以下操作时:float remaining_fl = fmod (float(a), float(b));

当 a = 0 且 b = 300 时,“remainder_fl”设置为“-1.#IND”。这仅发生在 Windows 版本的 64 位 DLL 上。使用调试 64 位 DLL 以及使用 Windows 32 位发行版和调试 DLLS 时,根本不会出现此问题。

如果有人对为什么会发生这种情况有任何建议或指示,我将不胜感激。

谢谢你,阿什

机器配置 64 位 Windows 2008 Std Server,优化发布 DLL。

4

1 回答 1

0

听起来这可能是一个错误,但由于它似乎不会在最新的 Visual Studio 中发生,并且实际上并未提供展示该行为的完整程序,因此很难判断。基于对问题的合理阅读,我使用了这个:

#include <iostream>
int main() {
    double a = 0, b = 300;
    float rem = fmod(float(a), float(b));
    std::cout << rem << "\n";
}

我知道早期版本的fmod返回不确定值存在某些问题,例如这个错误报告。我也会警惕float类型转换可能出现的问题,那里可能会引入错误。

最重要的是,根据当前版本的 Visual Studio检查您的代码,如果问题仍然存在,请向 Microsoft 提交错误报告。

于 2020-10-31T09:41:15.130 回答