我在周期性域(框)中进行了大量粒子(最多100000)的模拟,并且为了使粒子留在盒子内,我使用浮点数或双数的模数函数.
在功能上,Matlab一切都很棒mod.但是在C++我发现,该函数fmod并不完全等于Matlab的mod函数:
mod(-0.5,10)=9.5 - 我想要这个结果 C++
fmod(-0.5,10)=-0.5 - 我不想要这个.
当然,我可以用if语句解决我的问题.但是,我认为,它会影响效率(如果在关键循环中声明).有没有办法在没有if声明的情况下实现这个功能?可能是其他一些功能?
谢谢.
只需使用条件.它不会有效地影响效率.
inline double realmod (x, y)
{
result = fmod(x, y);
return result >= 0 ? result : result + y;
}
Run Code Online (Sandbox Code Playgroud)
fmod()调用汇编指令FPREM,需要16-64个周期(根据Pentium手册,http://www.intel.com/design/pentium/manuals/24143004.pdf).条件和浮点加法的跳转指令仅为5左右.
当你的代码有浮点除法时,你不需要为这些小东西烦恼.