func Example_Shift() { // Implementing Float "shift" by modifying the (binary) exponents directly. for s := -5; s <= 5; s++ { x := big.NewFloat(0.5) x.SetMantExp(x, x.MantExp(nil)+s) // shift x by s fmt.Println(x) } // Output: // 0.015625 // 0.03125 // 0.0625 // 0.125 // 0.25 // 0.5 // 1 // 2 // 4 // 8 // 16 }
func (a *Mpflt) CmpFloat64(c float64) int { if c == 0 { return a.Val.Sign() // common case shortcut } return a.Val.Cmp(big.NewFloat(c)) }
func ExampleFloat_Cmp() { inf := math.Inf(1) zero := 0.0 operands := []float64{-inf, -1.2, -zero, 0, +1.2, +inf} fmt.Println(" x y cmp") fmt.Println("---------------") for _, x64 := range operands { x := big.NewFloat(x64) for _, y64 := range operands { y := big.NewFloat(y64) fmt.Printf("%4g %4g %3d\n", x, y, x.Cmp(y)) } fmt.Println() } // Output: // x y cmp // --------------- // -Inf -Inf 0 // -Inf -1.2 -1 // -Inf -0 -1 // -Inf 0 -1 // -Inf 1.2 -1 // -Inf +Inf -1 // // -1.2 -Inf 1 // -1.2 -1.2 0 // -1.2 -0 -1 // -1.2 0 -1 // -1.2 1.2 -1 // -1.2 +Inf -1 // // -0 -Inf 1 // -0 -1.2 1 // -0 -0 0 // -0 0 0 // -0 1.2 -1 // -0 +Inf -1 // // 0 -Inf 1 // 0 -1.2 1 // 0 -0 0 // 0 0 0 // 0 1.2 -1 // 0 +Inf -1 // // 1.2 -Inf 1 // 1.2 -1.2 1 // 1.2 -0 1 // 1.2 0 1 // 1.2 1.2 0 // 1.2 +Inf -1 // // +Inf -Inf 1 // +Inf -1.2 1 // +Inf -0 1 // +Inf 0 1 // +Inf 1.2 1 // +Inf +Inf 0 }