如何纠正浮点模运算的错误

时间:2013-04-15 16:41:18

标签: shader cg

某些移动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

提前致谢。

0 个答案:

没有答案