我有一个 Mersenne twister 随机数生成器的简单包装器。目的是将生成器返回的数字(在 0 和 1 之间)缩放到参数定义的限制(开始和结束)之间。
所以我的功能是
inline float xlRandomFloat(float begin, float end) {return (begin+((end-begin)*genrand_real2()));}
我不相信 genrand_real2() 函数的实现很重要,但如果我错了,可以在这里找到
问题是函数不返回翻译结果。缩放 (乘以 (begin-end) 似乎工作正常,但似乎没有返回 begin 的添加。
因此,如果我调用 xlRandomFloat(5,10) - 我会得到 0 到 5 之间的值。
如果我使用 GDB 进行调试,并使用打印功能,那么它会显示正确的结果。所以我试着把事情分成几行,看看会发生什么
inline float xlRandomFloat(float begin, float end) {
float ret;
ret=(((end-begin)*genrand_real2()));
ret+=begin;
return ret;};
调试时,它直接从第一行跳转到 genrand_real2() 函数并完全跳过其他所有内容。这真的很令人困惑,所以我认为这可能与内联有关。我将文件从这个 .hpp 文件移动到 .cpp 并删除了 inline 关键字,一切正常。
但是为什么会出现这种行为,我该如何内联这个函数呢?此外,我不确定这是否相关,但通常当我对源代码进行更改时,我的 Make 编译会说没有什么可做的。这是不寻常的,因为通常我希望 make 能够了解源代码的变化并相应地进行重建。
有任何想法吗。
谢谢
曾娜