Skip to content

Commit

Permalink
exponent overflow fix
Browse files Browse the repository at this point in the history
  • Loading branch information
AYadrov authored Mar 12, 2024
1 parent 16a5f5c commit b27972a
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions main.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -583,6 +583,12 @@
'range-reduce)
'range-reduce)))))

(define (bfexponent x)
(define exp (+ (bigfloat-exponent x) (bigfloat-precision x)))
(if (< 1000000000 (abs exp))
0 ; overflow/inf.bf/nan.bf/0.bf
exp))

(define (ival-cos x)
(match-define (ival (endpoint xlo xlo!) (endpoint xhi xhi!) xerr? xerr) x)

Expand All @@ -600,8 +606,8 @@
(let ([prec (min (*rival-precision*)
(max (bf-precision)
(max
(+ (bigfloat-exponent xlo) (bigfloat-precision xlo) (bigfloat-precision xlo))
(+ (bigfloat-exponent xhi) (bigfloat-precision xhi) (bigfloat-precision xhi)))))])
(+ (bfexponent xlo) (bigfloat-precision xlo))
(+ (bfexponent xhi) (bigfloat-precision xhi)))))])
(match-define (ival (endpoint a _) (endpoint b _) _ _)
(parameterize ([bf-precision prec])
(ival-floor (ival-div x (ival-pi)))))
Expand Down Expand Up @@ -630,8 +636,8 @@
(let ([prec (min (*rival-precision*)
(max (bf-precision)
(max
(+ (bigfloat-exponent xlo) (bigfloat-precision xlo) (bigfloat-precision xlo))
(+ (bigfloat-exponent xhi) (bigfloat-precision xhi) (bigfloat-precision xhi)))))])
(+ (bfexponent xlo) (bigfloat-precision xlo))
(+ (bfexponent xhi) (bigfloat-precision xhi)))))])
(match-define (ival (endpoint a _) (endpoint b _) _ _)
(parameterize ([bf-precision prec])
(ival-round (ival-div x (ival-pi)))))
Expand Down Expand Up @@ -663,8 +669,8 @@
(let ([prec (min (*rival-precision*)
(max (bf-precision)
(max
(+ (bigfloat-exponent xlo) (bigfloat-precision xlo) (bigfloat-precision xlo))
(+ (bigfloat-exponent xhi) (bigfloat-precision xhi) (bigfloat-precision xhi)))))])
(+ (bfexponent xlo) (bigfloat-precision xlo))
(+ (bfexponent xhi) (bigfloat-precision xhi)))))])
(match-define (ival (endpoint a _) (endpoint b _) _ _)
(parameterize ([bf-precision prec])
(ival-round (ival-div x (ival-pi)))))
Expand Down

0 comments on commit b27972a

Please sign in to comment.