Mr.*_*Boy 5 c++ floating-point optimization math.h
在我正在分析的应用程序中,我发现在某些情况下,此功能可以占用总执行时间的10%.
正在使用MSVC++ 2008编译器,以供参考......我不记得modf是否映射到单个指令,或者是否有可能使其更快.
另见这里关于sqrt函数的类似问题
与sqrt不同,我真的不知道modf是如何工作的.有装配操作吗?例如,您可以这样做:
modf(float input,int &intPart, float &floatPart)
{
intPart= (int)input;
floatPart= input - intPart;
}
Run Code Online (Sandbox Code Playgroud)
但我认为这会导致施法/转换等处罚,快速实施如何运作?
modf确实应该是一个非常快的函数,所以问题可能是它仍然是一个函数(即,没有被内联)。您可以尝试使用库中完全相同的代码,但在标头中的内联静态函数中,以允许编译器内联它。
当函数内联时,如果您始终只使用尾数/指数之一,则编译器应该足够聪明,只发出代码来计算该部分,从而进一步加快速度。
如果您仍然对自己的浮点格式感兴趣,请查看维基百科上的浮点格式