Wrap av input till sinus approximation
Postat: 23 juni 2013, 23:07:13
Godagens!
Jag har en sinus approximation som fungerar mellan -pi och pi.
Problemet jag har är att jag behöver ett sätt att garantera att inputen är inom de intervallet. Man kan fixa det med en loop, men det är ganska överdrivet.
Jag funderar på att använda modulo på något vis för att fixa detta, men det blir inte riktigt korrekt:
Efter som den använder pi så granterar den inte att man kommer inom 2 pi utan pi, vilket blir fel ganska ofta.
Har någon är en bra tanke om hur man fixar detta? Jag behöver att det går fort så helst utan att använda if satser.
Jag har en sinus approximation som fungerar mellan -pi och pi.
Kod: Markera allt
float fast_sin(x)
{
const float B = 4/pi;
const float C = -4/(pi*pi);
const float P = 0.225;
y = B * x + C * x * abs(x);
y = P * (y * abs(y) - y) + y;
}
Jag funderar på att använda modulo på något vis för att fixa detta, men det blir inte riktigt korrekt:
Kod: Markera allt
float a = 5.7f;
float pi = 3.1415f;
float res = modulo(a, pi); // = 2.56 = a - pi <- fel, vill ha a - 2pi
float modulo(float x, float m)
{
int tmp = (int)(x / m);
return x - ((float)tmp) * m;
}
Har någon är en bra tanke om hur man fixar detta? Jag behöver att det går fort så helst utan att använda if satser.