From: Konstantin Shaposhnikov Date: Mon, 7 Sep 2015 14:31:04 +0000 (+0800) Subject: math/big: add example for RoundingMode X-Git-Tag: go1.6beta1~1115 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e216735dfad648b8ef26ffd389305a141c1dec75;p=gostls13.git math/big: add example for RoundingMode Updates #11241 Change-Id: I0614c5a9a7a4c399ad5d664f36c70c3210911905 Reviewed-on: https://go-review.googlesource.com/14356 Reviewed-by: Robert Griesemer --- diff --git a/src/math/big/floatexample_test.go b/src/math/big/floatexample_test.go index 358776e948..d135243b82 100644 --- a/src/math/big/floatexample_test.go +++ b/src/math/big/floatexample_test.go @@ -109,3 +109,34 @@ func ExampleFloat_Cmp() { // +Inf 1.2 1 // +Inf +Inf 0 } + +func ExampleRoundingMode() { + operands := []float64{2.6, 2.5, 2.1, -2.1, -2.5, -2.6} + + fmt.Printf("x ") + for mode := big.ToNearestEven; mode <= big.ToPositiveInf; mode++ { + fmt.Printf(" %s", mode) + } + fmt.Println() + + for _, f64 := range operands { + fmt.Printf("%4g", f64) + for mode := big.ToNearestEven; mode <= big.ToPositiveInf; mode++ { + // sample operands above require 2 bits to represent mantissa + // set binary precision to 2 to round them to integer values + f := new(big.Float).SetPrec(2).SetMode(mode).SetFloat64(f64) + format := fmt.Sprintf(" %%%dg", len(mode.String())) + fmt.Printf(format, f) + } + fmt.Println() + } + + // Output: + // x ToNearestEven ToNearestAway ToZero AwayFromZero ToNegativeInf ToPositiveInf + // 2.6 3 3 2 3 2 3 + // 2.5 2 3 2 3 2 3 + // 2.1 2 2 2 3 2 3 + // -2.1 -2 -2 -2 -3 -3 -2 + // -2.5 -2 -3 -2 -3 -3 -2 + // -2.6 -3 -3 -2 -3 -3 -2 +}