]> Cypherpunks repositories - gostls13.git/commitdiff
bug in const float divide
authorKen Thompson <ken@golang.org>
Fri, 5 Feb 2010 23:18:32 +0000 (15:18 -0800)
committerKen Thompson <ken@golang.org>
Fri, 5 Feb 2010 23:18:32 +0000 (15:18 -0800)
R=rsc
CC=golang-dev
https://golang.org/cl/204042

src/cmd/gc/mparith2.c

index 0887c5b43e60bd6d083383ecebbe51ff90ee8381..acfb3bee993655ba1681de531c073b474e73bbef 100644 (file)
@@ -618,6 +618,19 @@ mpdivmodfixfix(Mpint *q, Mpint *r, Mpint *n, Mpint *d)
        q->neg = ns^ds;
 }
 
+int
+iszero(Mpint *a)
+{
+       long *a1;
+       int i;
+       a1 = &a->a[0] + Mpprec;
+       for(i=0; i<Mpprec; i++) {
+               if(*--a1 != 0)
+                       return 0;
+       }
+       return 1;
+}
+
 void
 mpdivfract(Mpint *a, Mpint *b)
 {
@@ -632,13 +645,13 @@ mpdivfract(Mpint *a, Mpint *b)
        neg = n.neg ^ d.neg;
        n.neg = 0;
        d.neg = 0;
-
        for(i=0; i<Mpprec; i++) {
                x = 0;
                for(j=0; j<Mpscale; j++) {
                        x <<= 1;
                        if(mpcmp(&d, &n) <= 0) {
-                               x |= 1;
+                               if(!iszero(&d))
+                                       x |= 1;
                                mpsubfixfix(&n, &d);
                        }
                        mprsh(&d);