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