fix isnan
authorMartin Taibr <taibr.martin@gmail.com>
Sun, 29 Sep 2019 10:26:43 +0000 (12:26 +0200)
committerMartin Taibr <taibr.martin@gmail.com>
Sun, 29 Sep 2019 10:26:43 +0000 (12:26 +0200)
qcsrc/lib/warpzone/mathlib.qc

index 9105269..cf86d97 100644 (file)
@@ -27,10 +27,13 @@ bool isnan(float e)
        // the sane way to detect NaN is broken because of a compiler bug
        // (works with constants but breaks when assigned to variables)
        // use conversion to string instead
-
        //float f = e;
        //return (e != f);
-       return ftos(e) == "-nan";
+
+       // Negative NaN ("-nan") is much more common but plain "nan" can be created by negating *some* -nans so we need to check both.
+       // DP's QCVM and GMQCC's QCVM behave differently - one needs ftos(-(0.0 / 0.0)), the other ftos(-sqrt(-1)).
+       string s = ftos(e);
+       return s == "nan" || s == "-nan";
 }
 bool isnormal(float e)
 {