关于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引发的几率也不高。
求指教。
代码段(为了更详细的分析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引发的几率也不高。
求指教。
...全文
相关推荐
cmath苦函数列表
cmath库函数列表,把库中的所有函数都列举出来,希望大家喜欢。
CUDAMathAPI.pdf
API Reference Manual
objective-c 函数速查手册
该文本为word文档,基于《Objective-C函数速查实例手册》,为OC开发者提供所需的函数查询,已生成目录,方便查询,但本文档只提供方法,不提供对应的实例,诸君可根据方法自行到网上查询实例。整理不易,且行且珍惜。
Fundation架构秘籍
Fundation架构秘籍 ,里面集合里Fundation框架中的基本所有
85、常用系统接口函数详解
本文详细介绍了多个常用的系统接口函数,包括浮点数最小值计算函数fmin系列、浮点数取余函数fmod系列、消息显示函数fmtmsg、文件名匹配函数fnmatch以及文件打开函数fopen。文章涵盖函数的功能描述、函数原型、返回值、错误处理及使用示例,帮助开发者全面理解和正确使用这些系统接口函数,以提升程序的效率和稳定性。


