某些移动 GPU 不支持积分模运算。所以我必须使用浮点精度来实现模运算。Cg标准库中fmod的实现如下。
float2 fmod(float2 a, float2 b)
{
float2 c = frac(abs(a/b))*abs(b);
return (a < 0) ? -c : c; /* if ( a < 0 ) c = 0-c */
}
通常“a/b”计算为“a * rcp(b)”。在某些情况下,fmod 由于浮点错误(例如,当 a == b 时)返回意外值。有没有轻量级的方法来克服错误?一个想法是添加像 fmod(a + bias, b) 这样的偏差,其中 0.0 < 偏差 < 1.0。但它并不坚固。非常感谢任何评论或参考指针。
提前致谢。