【发布时间】:2020-02-18 20:38:33
【问题描述】:
当我使用 Clang++ 和 G++ 编译以下 C++ 代码时
void ScaleFactor(float32_t scale, int32_t &factor) {
factor = floor(log2(abs(scale))+1)
cout << factor << endl;
}
scale 的值等于 0.234375 并且 factor 通过引用传递给另一个函数中的整数变量,我在使用 GDB 进行调试时得到了 factor 的以下不同输出
(int32_t &) @0x7fffffffdaa0: -2147483648 (Clang++)
(int32_t &) @0x7fffffffda9c: -2 (G++)
但是,在将 abs() 替换为 fabs() 时,每个输出都与所需的输出匹配
(int32_t &) @0x7fffffffdb90: -2 (Clang++)
(int32_t &) @0x7fffffffdddc: -2 (G++)
造成这种差异的原因可能是什么?
【问题讨论】:
-
你用什么值调用函数?
-
对不起,忘了说!值比例为 0.234375,因子只是对整数变量的引用。
-
建议:将程序缩减为
ScaleFactor和一个简单的main,它只存在于使用您的固定输入调用ScaleFactor。如果您得到相同的结果,请发布这个小程序,以便我们都可以运行它并查看。如果问题消失了,yousa 就有了 bug,但这不是 yousa 认为的问题。 -
float32_t来自哪里? -
minimal reproducible example、命令行、警告等在哪里?这是相关的,答案可能取决于您的确切 #include 列表。