C++中的模数函数,其行为类似于matlab中的mod

Mik*_*kin 3 c++ matlab

我在周期性域(框)中进行了大量粒子(最多100000)的模拟,并且为了使粒子留在盒子内,我使用浮点数或双数的模数函数.

在功能上,Matlab一切都很棒mod.但是在C++我发现,该函数fmod并不完全等于Matlab的mod函数:

mod(-0.5,10)=9.5 - 我想要这个结果 C++

fmod(-0.5,10)=-0.5 - 我不想要这个.

当然,我可以用if语句解决我的问题.但是,我认为,它会影响效率(如果在关键循环中声明).有没有办法在没有if声明的情况下实现这个功能?可能是其他一些功能?

谢谢.

Que*_*onC 7

只需使用条件.它不会有效地影响效率.

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左右.

当你的代码有浮点除法时,你不需要为这些小东西烦恼.