Fix type of expt for bignums that get converted to infinity.

Found using random testing. Found 10 times.
This commit is contained in:
Vincent St-Amour 2015-11-05 16:12:29 -06:00
parent a0ef6b1d8c
commit 3ef8fe1739
2 changed files with 16 additions and 12 deletions

View File

@ -1610,22 +1610,25 @@
(-NonNegFlonum -NonNegFlonum . -> . -NonNegFlonum)
(-NonNegFlonum -NonNegReal . -> . (Un -NonNegFlonum -One))
(-PosReal -NonNegFlonum . -> . (Un -NonNegFlonum -One))
(-Flonum (Un -NegInt -PosInt) . -> . -Flonum)
(-Flonum -Int . -> . (Un -Flonum -One))
;; even integer exponents can give complex results
;; too large exponents turn into infinities, and (expt -inf.0 -inf.0) => nan.0+nan.0i
;; so no narrower cases for those. fixnums are ok, though
(-Flonum (Un -NegFixnum -PosFixnum) . -> . -Flonum)
(-Flonum -Fixnum . -> . (Un -Flonum -One))
(-Flonum -Flonum . -> . (Un -Flonum -FloatComplex))
;; 1st arg can't be non-neg, -0.0 gives the wrong sign
(-PosSingleFlonum (Un -NonNegSingleFlonum -NegRat -PosRat) . -> . -NonNegSingleFlonum)
(-NonNegSingleFlonum (Un -NonNegSingleFlonum -NegRat -PosRat) . -> . -SingleFlonum)
(-SingleFlonum (Un -NegInt -PosInt) . -> . -SingleFlonum)
(-SingleFlonum -Int . -> . (Un -SingleFlonum -One))
(-PosSingleFlonum (Un -NonNegSingleFlonum -NegFixnum -PosFixnum) . -> . -NonNegSingleFlonum)
(-NonNegSingleFlonum (Un -NonNegSingleFlonum -NegFixnum -PosFixnum) . -> . -SingleFlonum)
(-SingleFlonum (Un -NegFixnum -PosFixnum) . -> . -SingleFlonum)
(-SingleFlonum -Fixnum . -> . (Un -SingleFlonum -One))
(-SingleFlonum -SingleFlonum . -> . (Un -SingleFlonum -SingleFlonumComplex))
(-PosInexactReal (Un -NegReal -PosReal) . -> . -NonNegInexactReal)
(-NonNegInexactReal (Un -NegReal -PosReal) . -> . -InexactReal)
(-PosReal -Real . -> . -NonNegReal)
(-NonNegReal -Real . -> . -Real)
(-InexactReal (Un -NegInt -PosInt) . -> . -InexactReal)
(-PosInexactReal (Un -NegFixnum -PosFixnum) . -> . -NonNegInexactReal)
(-NonNegInexactReal (Un -NegFixnum -PosFixnum) . -> . -InexactReal)
(-PosReal -Fixnum . -> . -NonNegReal)
(-NonNegReal -Fixnum . -> . -Real)
(-InexactReal (Un -NegFixnum -PosFixnum) . -> . -InexactReal)
(-InexactReal -InexactReal . -> . (Un -InexactReal -InexactComplex))
(-Real -Int . -> . -Real)
(-Real -Fixnum . -> . -Real)
(-FloatComplex -FloatComplex . -> . -FloatComplex)
(-FloatComplex -Flonum . -> . (Un -FloatComplex -Flonum))
(-FloatComplex -InexactReal . -> . (Un -FloatComplex -InexactReal))

View File

@ -457,6 +457,7 @@
(tc-e (bitwise-and (exact-round 1.7976931348623157e+308) (exact-round -29)) -Int)
(tc-e (flexpt -0.0 -1.0) -Flonum)
(tc-e (expt -0.0f0 -3.0) -InexactReal)
(tc-e (expt -8.665778974912815f+107 -677460115195106837726964554590085563061636191189747) -Number)
(tc-e (exact->inexact 3) -PosFlonum)
(tc-e (exact->inexact -3) -NegFlonum)
(tc-e (real->double-flonum 0.0) -FlonumPosZero)