Index: src/cmd/gc/mparith3.c |
=================================================================== |
--- a/src/cmd/gc/mparith3.c |
+++ b/src/cmd/gc/mparith3.c |
@@ -34,7 +34,6 @@ |
if(os == 0) { |
// zero |
a->exp = 0; |
- a->val.neg = 0; |
return; |
} |
@@ -187,8 +186,11 @@ |
yyerror("mpgetflt ovf"); |
s = sigfig(a); |
- if(s == 0) |
- return 0; |
+ if(s == 0) { |
+ if(a->val.neg) |
+ return -0.0; |
+ return 0.0; |
+ } |
if(s != Mpnorm) { |
yyerror("mpgetflt norm"); |
@@ -248,12 +250,12 @@ |
print("\nconst %g", c); |
mpmovecfix(&a->val, 0); |
a->exp = 0; |
- if(c == 0) |
- goto out; |
- if(c < 0) { |
+ if(signbit(c)) { |
a->val.neg = 1; |
c = -c; |
} |
+ if(c == 0) |
+ goto out; |
f = frexp(c, &i); |
a->exp = i; |