Unustasid parooli?



     
Sisseloginud kasutajatele märgistatakse automaatselt teksti piirkonnad, mis on muutunud alates viimasest lugemisest. Lisandunud osa on roheline, eemaldatud osa punane.
Lisaks märgistatakse sisseloginud kasutajatele menüüs täiendavate värvide abil artiklid, mis on kasutajal loetud (hall), ning artiklid, mis on peale lugemist täienenud (roheline).

   

     

Pealkiri :
Id (lühend aadressiribale) :
Autor ja viimase muudatuse autor :
Loomise aeg ja viimane muudatus :
Teksti pikkus :
Luba ligipääs ainult kasutajanimedele (eralda komadega). Autoril on alati ligipääs. :




Fast math functions
 
 
 
 
Local copies of the code in the above referred pages
 
 
Fast inverse square root
 
float InvSqrt(float x)
{
    float xhalf = 0.5f * x;
    int i = *reinterpret_cast<int *>(&x);
    i = 0x5f3759df - (i >> 1);
    x = *reinterpret_cast<float *>(&i);
    return x * (1.5f - xhalf * x * x);
}
 
 
Low precision sine/cosine (~14x faster)
 
float lowprec_sin(float x)
{
    float sin;
 
    //always wrap input angle to -PI..PI
    if (x < -3.14159265)
        x += 6.28318531;
    else if (x > 3.14159265)
        x -= 6.28318531;
 
    //compute sine
    if (x < 0)
        sin = 1.27323954 * x + .405284735 * x * x;
    else
        sin = 1.27323954 * x - 0.405284735 * x * x;
 
    return sin;
}
 
float lowprec_cos(float x)
{
    float cos;
 
    //compute cosine: sin(x + PI/2) = cos(x)
    x += 1.57079632;
 
    if (x < -3.14159265)
        x += 6.28318531;
    else if (x > 3.14159265)
        x -= 6.28318531;
 
    if (x < 0)
        cos = 1.27323954 * x + 0.405284735 * x * x
    else
        cos = 1.27323954 * x - 0.405284735 * x * x;
 
    return cos;
}
 
 
High precision sine/cosine (~8x faster)
 
float highprec_sin(float x)
{
    float sin;
 
    //always wrap input angle to -PI..PI
    if (x < -3.14159265)
        x += 6.28318531;
    else if (x > 3.14159265)
        x -= 6.28318531;
 
    //compute sine
    if (x < 0)
    {
        sin = 1.27323954 * x + .405284735 * x * x;
        if (sin < 0)
            sin = .225 * (sin * -sin - sin) + sin;
        else
            sin = .225 * (sin * sin - sin) + sin;
    }
    else
    {
        sin = 1.27323954 * x - 0.405284735 * x * x;
        if (sin < 0)
            sin = .225 * (sin * -sin - sin) + sin;
        else
            sin = .225 * (sin * sin - sin) + sin;
    }
 
    return sin;
}
 
float highprec_cos(float x)
{
    float cos;
 
    //compute cosine: sin(x + PI/2) = cos(x)
    x += 1.57079632;
 
    if (x < -3.14159265)
        x += 6.28318531;
    else if (x > 3.14159265)
        x -= 6.28318531;
 
    if (x < 0)
    {
        cos = 1.27323954 * x + 0.405284735 * x * x;
        if (cos < 0)
            cos = .225 * (cos *-cos - cos) + cos;
        else
            cos = .225 * (cos * cos - cos) + cos;
    }
    else
    {
        cos = 1.27323954 * x - 0.405284735 * x * x;
        if (cos < 0)
            cos = .225 * (cos *-cos - cos) + cos;
        else
            cos = .225 * (cos * cos - cos) + cos;
    }
 
    return cos;
}
 
 
 
See also
* http://roland.pri.ee/wiki/logarithm_of_a_sum - Method for calculating precise logarithm of a sum 
 

kommentaarium spämmi tõttu ajutiselt välja lülitatud








  Saada kiri