关于fmodf返回无效值
最近遇到一个随机出现的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引发的几率也不高。
求指教。