fixed nan propogation error
[vg.git] / vg_m.h
diff --git a/vg_m.h b/vg_m.h
index c07f38984e07ada336ffe5c8328fef6649a3243a..833f1f01598a628a4c09df3c873c1a7cef7a3644 100644 (file)
--- a/vg_m.h
+++ b/vg_m.h
@@ -573,11 +573,15 @@ static inline void q_mul( v4f q, v4f q1, v4f d )
 
 static inline void q_normalize( v4f q )
 {
-   f32 s = 1.0f/ sqrtf(v4_dot(q,q));
-   q[0] *= s;
-   q[1] *= s;
-   q[2] *= s;
-   q[3] *= s;
+   f32 l2 = v4_dot(q,q);
+   if( l2 < 0.00001f ) q_identity( q );
+   else {
+      f32 s = 1.0f/sqrtf(l2);
+      q[0] *= s;
+      q[1] *= s;
+      q[2] *= s;
+      q[3] *= s;
+   }
 }
 
 static inline void q_inv( v4f q, v4f d )
@@ -2160,7 +2164,7 @@ static void vg_rand_seed( unsigned long seed )
     * Programming," Vol. 2 (2nd Ed.) pp.102.
     */
    vg_rand.mt[0] = seed & 0xffffffff;
-   for( vg_rand.index=1; vg_rand.index<MT_STATE_VECTOR_LENGTH; vg_rand.index++ ){
+   for( vg_rand.index=1; vg_rand.index<MT_STATE_VECTOR_LENGTH; vg_rand.index++){
       vg_rand.mt[vg_rand.index] = 
          (6069 * vg_rand.mt[vg_rand.index-1]) & 0xffffffff;
    }