Browse Source

fix: flt_status was not always set properly

ceriel 34 years ago
parent
commit
fe14fd11f4
1 changed files with 6 additions and 4 deletions
  1. 6 4
      modules/src/flt_arith/flt_str2fl.c

+ 6 - 4
modules/src/flt_arith/flt_str2fl.c

@@ -200,20 +200,22 @@ add_exponent(e, exp)
 	int neg = exp < 0;
 	int divsz, modsz;
 	flt_arith x;
-	int	status;
+	register int status = 0;
 
 	if (neg) exp = -exp;
 	divsz = exp / SMALLSZ;
 	modsz = exp % SMALLSZ;
+	if (!status) status = flt_status;
 	flt_mul(e, (neg ? r_10pow : s10pow) + modsz, &x);
-	if (flt_status) status = flt_status;
+	if (!status) status = flt_status;
 	while (divsz >= BIGSZ) {
 		flt_mul(&x, neg ? &r_big_10pow[BIGSZ-1] : &big_10pow[BIGSZ-1],&x);
-		if (flt_status) status = flt_status;
+		if (!status) status = flt_status;
 		divsz -= BIGSZ-1;
 	}
 	flt_mul(&x, (neg ? r_big_10pow : big_10pow) + divsz, e);
-	if (flt_status) status = flt_status;
+	if (!status) status = flt_status;
+	flt_status = status;
 }
 
 flt_str2flt(s, e)