More precise type for flexpt.
original commit: e786149434633b802f1c880799ad5d27b2361112
This commit is contained in:
parent
d2431e07d5
commit
8fdb647233
|
@ -185,6 +185,9 @@
|
|||
(tc-e (expt 0.5 0.3) -PosFlonum)
|
||||
(tc-e (expt 0.5 2) -PosFlonum)
|
||||
(tc-e (expt 0.5 0) -PosReal)
|
||||
(tc-e (flexpt 0.5 0.3) -NonNegFlonum)
|
||||
(tc-e (flexpt 0.00000000001 100000000000.0) -NonNegFlonum)
|
||||
(tc-e (flexpt -2.0 -0.5) -Flonum) ; NaN
|
||||
|
||||
[tc-e/t (lambda: () 3) (t:-> -PosByte : -true-lfilter)]
|
||||
[tc-e/t (lambda: ([x : Number]) 3) (t:-> N -PosByte : -true-lfilter)]
|
||||
|
|
|
@ -566,8 +566,11 @@
|
|||
-Flonum))))) ; anything negative returns nan
|
||||
(define flexpt-type
|
||||
(lambda ()
|
||||
;; could be more precise...
|
||||
(from-cases (-Flonum -Flonum . -> . -Flonum))))
|
||||
(from-cases (-FlonumZero -Flonum . -> . -FlonumZero) ; (flexpt -0.0 0.1) -> 0.0 ; not sign preserving
|
||||
(-Flonum -FlonumZero . -> . -PosFlonum) ; always returns 1.0
|
||||
(-NonNegFlonum -Flonum . -> . -NonNegFlonum) ; can underflow, so not closed on positives
|
||||
(-NonPosFlonum -NonNegFlonum . -> . -NonPosFlonum) ; if we allow negative exponents, can return NaN, which is not NonPos
|
||||
(-Flonum -Flonum . -> . -Flonum))))
|
||||
|
||||
(define fx->fl-type
|
||||
(lambda ()
|
||||
|
|
Loading…
Reference in New Issue
Block a user