diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-22 01:15:33 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-22 01:15:33 +0000 |
commit | 362133b5eb9024407b03e8095307f9d5d36154c2 (patch) | |
tree | 06f36bbef6fae78278f799194ad0df8ba2dabaa1 /libgo/go/math | |
parent | 331a34f7832c3b58fd8488f49121a6af52433123 (diff) | |
download | gcc-362133b5eb9024407b03e8095307f9d5d36154c2.tar.gz |
libgo: Update to revision 15193:6fdc1974457c of master library.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194692 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo/go/math')
-rw-r--r-- | libgo/go/math/all_test.go | 7 | ||||
-rw-r--r-- | libgo/go/math/big/int.go | 20 | ||||
-rw-r--r-- | libgo/go/math/big/int_test.go | 30 | ||||
-rw-r--r-- | libgo/go/math/big/nat.go | 2 | ||||
-rw-r--r-- | libgo/go/math/log10.go | 3 |
5 files changed, 60 insertions, 2 deletions
diff --git a/libgo/go/math/all_test.go b/libgo/go/math/all_test.go index cdea8035f9a..0d8b10f67fa 100644 --- a/libgo/go/math/all_test.go +++ b/libgo/go/math/all_test.go @@ -2281,6 +2281,13 @@ func TestLog2(t *testing.T) { t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i]) } } + for i := -1074; i <= 1023; i++ { + f := Ldexp(1, i) + l := Log2(f) + if l != float64(i) { + t.Errorf("Log2(2**%d) = %g, want %d", i, l, i) + } + } } func TestModf(t *testing.T) { diff --git a/libgo/go/math/big/int.go b/libgo/go/math/big/int.go index 95c0d58ee97..63a4536e2a0 100644 --- a/libgo/go/math/big/int.go +++ b/libgo/go/math/big/int.go @@ -51,6 +51,13 @@ func (z *Int) SetInt64(x int64) *Int { return z } +// SetUint64 sets z to x and returns z. +func (z *Int) SetUint64(x uint64) *Int { + z.abs = z.abs.setUint64(uint64(x)) + z.neg = false + return z +} + // NewInt allocates and returns a new Int set to x. func NewInt(x int64) *Int { return new(Int).SetInt64(x) @@ -519,6 +526,19 @@ func (x *Int) Int64() int64 { return v } +// Uint64 returns the int64 representation of x. +// If x cannot be represented in an uint64, the result is undefined. +func (x *Int) Uint64() uint64 { + if len(x.abs) == 0 { + return 0 + } + v := uint64(x.abs[0]) + if _W == 32 && len(x.abs) > 1 { + v |= uint64(x.abs[1]) << 32 + } + return v +} + // SetString sets z to the value of s, interpreted in the given base, // and returns z and a boolean indicating success. If SetString fails, // the value of z is undefined but the returned value is nil. diff --git a/libgo/go/math/big/int_test.go b/libgo/go/math/big/int_test.go index d3c5a0e8bfe..fd6d152b39d 100644 --- a/libgo/go/math/big/int_test.go +++ b/libgo/go/math/big/int_test.go @@ -1135,6 +1135,36 @@ func TestInt64(t *testing.T) { } } +var uint64Tests = []uint64{ + 0, + 1, + 4294967295, + 4294967296, + 8589934591, + 8589934592, + 9223372036854775807, + 9223372036854775808, + 18446744073709551615, // 1<<64 - 1 +} + +func TestUint64(t *testing.T) { + in := new(Int) + for i, testVal := range uint64Tests { + in.SetUint64(testVal) + out := in.Uint64() + + if out != testVal { + t.Errorf("#%d got %d want %d", i, out, testVal) + } + + str := fmt.Sprint(testVal) + strOut := in.String() + if strOut != str { + t.Errorf("#%d.String got %s want %s", i, strOut, str) + } + } +} + var bitwiseTests = []struct { x, y string and, or, xor, andNot string diff --git a/libgo/go/math/big/nat.go b/libgo/go/math/big/nat.go index 13a623a7032..9d09f97b77b 100644 --- a/libgo/go/math/big/nat.go +++ b/libgo/go/math/big/nat.go @@ -826,7 +826,7 @@ func (x nat) string(charset string) string { // Convert words of q to base b digits in s. If q is large, it is recursively "split in half" // by nat/nat division using tabulated divisors. Otherwise, it is converted iteratively using -// repeated nat/Word divison. +// repeated nat/Word division. // // The iterative method processes n Words by n divW() calls, each of which visits every Word in the // incrementally shortened q for a total of n + (n-1) + (n-2) ... + 2 + 1, or n(n+1)/2 divW()'s. diff --git a/libgo/go/math/log10.go b/libgo/go/math/log10.go index 3d2cec6656c..d880ec2040d 100644 --- a/libgo/go/math/log10.go +++ b/libgo/go/math/log10.go @@ -26,5 +26,6 @@ func Log2(x float64) float64 { } func log2(x float64) float64 { - return Log(x) * (1 / Ln2) + frac, exp := Frexp(x) + return Log(frac)*(1/Ln2) + float64(exp) } |