Revision: 65202
          http://sourceforge.net/p/brlcad/code/65202
Author:   carlmoore
Date:     2015-06-05 19:30:34 +0000 (Fri, 05 Jun 2015)
Log Message:
-----------
end the program if we find negative number raised to non-integer power

Modified Paths:
--------------
    brlcad/trunk/src/util/bwmod.c

Modified: brlcad/trunk/src/util/bwmod.c
===================================================================
--- brlcad/trunk/src/util/bwmod.c       2015-06-05 19:00:02 UTC (rev 65201)
+++ brlcad/trunk/src/util/bwmod.c       2015-06-05 19:30:34 UTC (rev 65202)
@@ -73,6 +73,20 @@
 int char_arith = 0;
 
 int
+checkpow(double x , double exponent)
+{
+    double diff;
+    if (x >= 0.0) return 1;
+    diff = exponent - (double)((int)exponent);
+    if ( diff < 0.0 || diff > 0.0 ) {
+       fprintf(stderr,"bwmod: negative number (%f) to non-integer power 
(%f)\n",
+       x,exponent);
+        bu_exit (-1, NULL);
+    }
+    return 1;
+}
+
+int
 get_args(int argc, char **argv)
 {
     int c;
@@ -184,7 +198,8 @@
            switch (op[i]) {
                case ADD : d += val[i]; break;
                case MULT: d *= val[i]; break;
-               case POW : d = pow(d, val[i]); break;
+               case POW : checkpow(d,val[i]);
+                    d = pow(d, val[i]); break;
                case ABS : if (d < 0.0) d = - d; break;
                case SHIFT: tmp=d; tmp=tmp<<(int)val[i];d=tmp;break;
                case OR  : tmp=d; tmp |= (int)val[i]; d=tmp;break;
@@ -216,7 +231,8 @@
            switch (op[i]) {
                case ADD : d += val[i]; break;
                case MULT: d *= val[i]; break;
-               case POW : d = pow((double)d, val[i]); break;
+               case POW : checkpow((double)d,val[i]);
+                   d = pow((double)d, val[i]); break;
                case ABS : if (d < 0.0) d = - d; break;
                case SHIFT: d=d<<(int)val[i]; break;
                case AND : d &= (int)val[i]; break;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to