关于fmodf返回无效值

beyondlwm beyondlwm 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近遇到一个随机出现的bug,请大家参考一下:
代码段(为了更详细的分析bug特意写成这样的):
float fTemp = 0;
BEATS_ASSERT(!isinf(m_fPlayingTime) && !isnan(m_fPlayingTime));
fTemp = fmodf(m_fPlayingTime, fDuration);
BEATS_ASSERT(!isinf(fTemp) && !isnan(fTemp));

问题:
第二个断言被引发,fTemp的值为-1.#IND000.
当时的上下文为:
m_fPlayingTime = 3.34924316
fDuration = 3.33333325

奇怪的地方:
因为assert引发以后,运行指针会停止在最后一句话上,我在vs2013里直接将该运行指针拉到上一句(即在上下文完全不变的情况下,重新执行fmodf),可以得到正确结果 fTemp = 0.0159099102

我的环境是WINDOWS7 + Vs2013, 没用使用多线程,该bug引发的几率也不高。

求指教。
...全文
评论 12
收藏 已收藏
分享
返回顶部
beyondlwm
C++ 语言 65,214 成员 250,514 内容