diff --git a/pkgs/math-pkgs/math-lib/math/private/flonum/flonum-exp.rkt b/pkgs/math-pkgs/math-lib/math/private/flonum/flonum-exp.rkt index ab1eda5a1c..2642c98878 100644 --- a/pkgs/math-pkgs/math-lib/math/private/flonum/flonum-exp.rkt +++ b/pkgs/math-pkgs/math-lib/math/private/flonum/flonum-exp.rkt @@ -6,7 +6,7 @@ "flonum-polyfun.rkt" "../unsafe.rkt") -(provide flexpm1 flexpsqr flgauss flexp1p flexp2) +(provide flexpm1 flexpsqr flgauss flexp1p flexp2 flpow2near) (define expm1-poly-numer (make-flpolyfun @@ -105,4 +105,8 @@ (unsafe-vector-ref flexp2s (fl->exact-integer (fl+ x 1074.0))))] [else (flexpt 2.0 x)])) + (: flpow2near (-> Flonum Flonum)) + (define (flpow2near a) + (flexp2 (flmax -1074.0 (flmin 1023.0 (flround (fl/ (fllog (flabs a)) (fllog 2.0))))))) + ) ; begin-encourage-inline