bigfloat icon indicating copy to clipboard operation
bigfloat copied to clipboard

Pow(Inf, -1) == 0 not Inf. True for all negative exponents

Open vsivsi opened this issue 5 years ago • 2 comments

Hi again, this one is more of an edge case... But for consistency with math.Pow()

Also, for -Inf: Pow(-Inf, -1) == -0, but this also doesn't work because of #35

Thanks again!

package main

import (
	"fmt"
        "math"
	"math/big"

	"github.com/ALTree/bigfloat"
)

func main() {
	// Exponentiation of Inf^n equals 0 for all negative n
	// e.g. Inf^-2 = 0

	zero := math.Pow(math.Inf(1), -2)
        fmt.Printf("%f\n", zero)     //   0.000000

	bigneg2 := big.NewFloat(-2)
	bigInf := big.NewFloat(0.0).SetInf(false)
	bigzero := bigfloat.Pow(bigInf, bigneg2)   
	fmt.Printf("%f\n", bigzero)  //   +Inf  !=  0.000000
}

vsivsi avatar Apr 12 '19 23:04 vsivsi

Repro for second case of -Inf:

package main

import (
	"fmt"
        "math"
	"math/big"

	"github.com/ALTree/bigfloat"
)

func main() {
	// Exponentiation of -Inf^n equals -0 for all odd negative integer n
	// e.g. -Inf^-1 = -0
	// Exponentiation of -Inf^n equals 0 for all even negative integer n
	// e.g. -Inf^-2 = 0

	zero := math.Pow(math.Inf(-1), -1)
	fmt.Printf("%f\n", zero)     //   0.000000
	fmt.Printf("%t\n", math.Signbit(zero))     //   true == negative zero

	zero = math.Pow(math.Inf(-1), -2)
	fmt.Printf("%f\n", zero)     //   0.000000
	fmt.Printf("%t\n", math.Signbit(zero))     //   false == positive zero

	bigneg1 := big.NewFloat(-1)
	bignegInf := big.NewFloat(0.0).SetInf(true)
	bignegzero := bigfloat.Pow(bignegInf, bigneg1)	//  PANIC!    
	fmt.Printf("%f\n", bignegzero)			//  Should be -0.000000
	fmt.Printf("%t\n", bignegzero.Signbit())	//  Should be true

	bigneg2 := big.NewFloat(-2)
	bigzero := bigfloat.Pow(bignegInf, bigneg2)	//  PANIC!    
	fmt.Printf("%f\n", bigzero)			//  Should be 0.000000
	fmt.Printf("%t\n", bigzero.Signbit())		//  Should be false

}

vsivsi avatar Apr 12 '19 23:04 vsivsi

See https://github.com/ALTree/bigfloat/pull/37

vsivsi avatar Apr 15 '19 23:04 vsivsi