fix some mathlib bugs
authordiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sun, 8 Nov 2009 17:43:37 +0000 (17:43 +0000)
committerdiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sun, 8 Nov 2009 17:43:37 +0000 (17:43 +0000)
git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8248 f962a42d-fe04-0410-a3ab-8c8b0445ebaa

data/qcsrc/common/mathlib.qc

index 978fa8d..5f45da0 100644 (file)
@@ -93,13 +93,13 @@ vector frexp(float x)
 {
        vector v;
        v_z = 0;
-       v_y = ilogb(x);
+       v_y = ilogb(x) + 1;
        v_x = x / exp2(v_y);
        return v;
 }
 int ilogb(float x)
 {
-       return floor(log2(x));
+       return floor(log2(fabs(x)));
 }
 float ldexp(float x, int e)
 {
@@ -144,7 +144,7 @@ float log2(float x)
 }
 float logb(float x)
 {
-       return floor(log2(x));
+       return floor(log2(fabs(x)));
 }
 vector modf(float f)
 {
@@ -179,6 +179,8 @@ float erfc(float x)
 vector lgamma(float x)
 {
        // TODO improve accuracy
+       if(!isfinite(x))
+               return fabs(x);
        if(x < 1 && x == floor(x))
                return nan("gamma") * '1 1 1';
        if(x < 0.1)