]> Cypherpunks repositories - gostls13.git/commitdiff
Corrected broken assertion.
authorRobert Griesemer <gri@golang.org>
Tue, 2 Feb 2010 00:14:22 +0000 (16:14 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 2 Feb 2010 00:14:22 +0000 (16:14 -0800)
Fixes #571.

R=rsc
CC=golang-dev
https://golang.org/cl/198045

src/pkg/bignum/bignum.go
src/pkg/bignum/bignum_test.go

index ee7d45ba67aac67068a73abe44867b2a9c244b92..485583199bac879174e44c10dc12e9985bf8346f 100644 (file)
@@ -565,16 +565,18 @@ func divmod(x, y []digit2) ([]digit2, []digit2) {
                                t := c + digit(x[i+j]) - digit(y[j])*q
                                c, x[i+j] = digit(int64(t)>>_W2), digit2(t&_M2) // requires arithmetic shift!
                        }
+                       x[k] = digit2((c + digit(x[k])) & _M2)
 
                        // correct if trial digit was too large
-                       if c+digit(x[k]) != 0 {
+                       if x[k] != 0 {
                                // add y
                                c := digit(0)
                                for j := 0; j < m; j++ {
                                        t := c + digit(x[i+j]) + digit(y[j])
                                        c, x[i+j] = t>>_W2, digit2(t&_M2)
                                }
-                               assert(c+digit(x[k]) == 0)
+                               x[k] = digit2((c + digit(x[k])) & _M2)
+                               assert(x[k] == 0)
                                // correct trial digit
                                q--
                        }
index 532fc97405dcf7c6124f43d865bf8f10413e8ac8..ade72dd1bc77a3cdc39efefcf51780c2f7602c99 100644 (file)
@@ -663,3 +663,9 @@ func TestNatPop(t *testing.T) {
                test(i, nat_one.Shl(i).Sub(nat_one).Pop() == i)
        }
 }
+
+
+func TestIssue571(t *testing.T) {
+       const min_float = "4.940656458412465441765687928682213723651e-324"
+       RatFromString(min_float, 10) // this must not crash
+}