将变量放入给定范围的最快方法是什么?例如,确保角度"double alpha"始终在(0.0,2*Pi)内.
我自己找到了两个解决方案,其中一个解决方案速度慢得多,而另一个解决方案看起来很容易复杂.必须有更好的方式,不是吗?
//short, but very slow (so it's a no-go);
return asin(sin(alpha));
//much faster, but seems ugly (two while loops to change a variable? come on!)
while (alpha < 0.0)
{
alpha += 2.0 * M_PI;
}
while (alpha >= 2.0 * M_PI)
{
alpha -= 2.0 * M_PI;
}
return alpha;
Run Code Online (Sandbox Code Playgroud)
我建议你不要手动实现这个功能,而是使用fmod()函数系列:http://linux.die.net/man/3/fmodf.不过,您仍然需要自己处理负面结果:
alpha = fmod(alpha, 2.0 * M_PI);
if (alpha < 0.0)
alpha += 2.0 * M_PI;
return alpha;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |