// Low percision sine approximation
public class SineLP
{
private static float sin = 0;
public static float Sin( float x )
{
if (x < -3.14159265f)
x += 6.28318531f;
else
if (x > 3.14159265f)
x -= 6.28318531f;
if ( x < 0 )
return x * ( 1.27323954f + 0.405284735f * x );
else
return x * ( 1.27323954f - 0.405284735f * x );
}
}
// High percision sine approximation
public class SineHP
{
private static float sin = 0;
public static float Sin( float x )
{
if (x < -3.14159265f)
x += 6.28318531f;
else
if (x > 3.14159265f)
x -= 6.28318531f;
if ( x < 0 )
{
sin = x * ( 1.27323954f + 0.405284735f * x );
if ( sin < 0 )
sin = sin * ( -0.255f * ( sin + 1 ) + 1 );
else
sin = sin * ( 0.255f * ( sin - 1 ) + 1 );
}
else
{
sin = x * ( 1.27323954f - 0.405284735f * x );
if ( sin < 0 )
sin = sin * ( -0.255f * ( sin + 1 ) + 1 );
else
sin = sin * ( 0.255f * ( sin - 1 ) + 1 );
}
return sin;
}
}