|
3 | 3 | (require math/private/bigfloat/mpfr |
4 | 4 | ffi/unsafe) |
5 | 5 |
|
| 6 | +(define *rival-max-precision* (make-parameter 10000)) |
| 7 | + |
6 | 8 | (provide -inf.bf |
7 | 9 | -1.bf |
8 | 10 | 0.bf |
|
13 | 15 | +inf.bf |
14 | 16 | +nan.bf |
15 | 17 | bf-return-exact? |
16 | | - rnd) |
| 18 | + rnd |
| 19 | + *rival-max-precision*) |
17 | 20 |
|
18 | 21 | (define-syntax-rule (rnd mode op args ...) |
19 | 22 | (parameterize ([bf-rounding-mode mode]) |
|
56 | 59 | (define mpfr-remainder! |
57 | 60 | (get-mpfr-fun 'mpfr_remainder (_fun _mpfr-pointer _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
58 | 61 |
|
59 | | -(define mpfr-set-prec! (get-mpfr-fun 'mpfr_set_prec (_fun _mpfr-pointer _prec_t -> _void))) |
| 62 | +(define mpfr-hypot! |
| 63 | + (get-mpfr-fun 'mpfr_hypot (_fun _mpfr-pointer _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 64 | + |
| 65 | +(define mpfr-pow! |
| 66 | + (get-mpfr-fun 'mpfr_pow (_fun _mpfr-pointer _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 67 | + |
| 68 | +(define mpfr-log! (get-mpfr-fun 'mpfr_log (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 69 | + |
| 70 | +(define mpfr-exp! (get-mpfr-fun 'mpfr_exp (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 71 | + |
| 72 | +(define mpfr-expm1! (get-mpfr-fun 'mpfr_expm1 (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 73 | + |
| 74 | +(define mpfr-sqrt! (get-mpfr-fun 'mpfr_sqrt (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 75 | + |
| 76 | +(define mpfr-sin! (get-mpfr-fun 'mpfr_sin (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 77 | + |
| 78 | +(define mpfr-cos! (get-mpfr-fun 'mpfr_cos (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 79 | + |
| 80 | +(define mpfr-tan! (get-mpfr-fun 'mpfr_tan (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 81 | + |
| 82 | +(define mpfr-cbrt! (get-mpfr-fun 'mpfr_cbrt (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 83 | + |
| 84 | +(define mpfr-neg! (get-mpfr-fun 'mpfr_neg (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 85 | + |
| 86 | +(define mpfr-abs! (get-mpfr-fun 'mpfr_abs (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 87 | + |
| 88 | +(define mpfr-asin! (get-mpfr-fun 'mpfr_asin (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 89 | + |
| 90 | +(define mpfr-acos! (get-mpfr-fun 'mpfr_acos (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 91 | + |
| 92 | +(define mpfr-atan! (get-mpfr-fun 'mpfr_atan (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 93 | + |
| 94 | +(define mpfr-sinh! (get-mpfr-fun 'mpfr_sinh (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 95 | + |
| 96 | +(define mpfr-tanh! (get-mpfr-fun 'mpfr_tanh (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 97 | + |
| 98 | +(define mpfr-asinh! (get-mpfr-fun 'mpfr_asinh (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 99 | + |
| 100 | +(define mpfr-acosh! (get-mpfr-fun 'mpfr_acosh (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 101 | + |
| 102 | +(define mpfr-atanh! (get-mpfr-fun 'mpfr_atanh (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 103 | + |
| 104 | +(define mpfr-erf! (get-mpfr-fun 'mpfr_erf (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 105 | + |
| 106 | +(define mpfr-erfc! (get-mpfr-fun 'mpfr_erfc (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 107 | + |
| 108 | +(define mpfr-log2! (get-mpfr-fun 'mpfr_log2 (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 109 | + |
| 110 | +(define mpfr-log10! (get-mpfr-fun 'mpfr_log10 (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 111 | + |
| 112 | +(define mpfr-log1p! (get-mpfr-fun 'mpfr_log1p (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 113 | + |
| 114 | +(define mpfr-exp2! (get-mpfr-fun 'mpfr_exp2 (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 115 | + |
| 116 | +(define mpfr-rint! (get-mpfr-fun 'mpfr_rint (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 117 | + |
| 118 | +(define mpfr-round! (get-mpfr-fun 'mpfr_round (_fun _mpfr-pointer _mpfr-pointer -> _int))) |
| 119 | + |
| 120 | +(define mpfr-ceil! (get-mpfr-fun 'mpfr_ceil (_fun _mpfr-pointer _mpfr-pointer -> _int))) |
| 121 | + |
| 122 | +(define mpfr-floor! (get-mpfr-fun 'mpfr_floor (_fun _mpfr-pointer _mpfr-pointer -> _int))) |
| 123 | + |
| 124 | +(define mpfr-trunc! (get-mpfr-fun 'mpfr_trunc (_fun _mpfr-pointer _mpfr-pointer -> _int))) |
| 125 | + |
| 126 | +(define mpfr-min! |
| 127 | + (get-mpfr-fun 'mpfr_min (_fun _mpfr-pointer _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 128 | + |
| 129 | +(define mpfr-max! |
| 130 | + (get-mpfr-fun 'mpfr_max (_fun _mpfr-pointer _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 131 | + |
| 132 | +(define mpfr-cosh! (get-mpfr-fun 'mpfr_cosh (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
| 133 | + |
| 134 | +(define mpfr-const-pi! (get-mpfr-fun 'mpfr_const_pi (_fun _mpfr-pointer _rnd_t -> _int))) |
60 | 135 |
|
61 | | -(define mpfr-init2! (get-mpfr-fun 'mpfr_init2 (_fun _mpfr-pointer _prec_t -> _void))) |
| 136 | +(define mpfr-atan2! |
| 137 | + (get-mpfr-fun 'mpfr_atan2 (_fun _mpfr-pointer _mpfr-pointer _mpfr-pointer _rnd_t -> _int))) |
62 | 138 |
|
63 | 139 | (define mpfr-set! (get-mpfr-fun 'mpfr_set (_fun _mpfr-pointer _mpfr-pointer _rnd_t -> _void))) |
64 | 140 |
|
65 | | -(define (mpfr-new! prec) |
66 | | - (define bf (make-mpfr 0 0 0 #f)) |
67 | | - (mpfr-init2! bf prec) |
68 | | - bf) |
| 141 | +(define mpfr-set-prec! set-mpfr-prec!) |
69 | 142 |
|
70 | 143 | (define (bfremainder x mod) |
71 | 144 | (define out (bf 0)) |
|
229 | 302 | mpfr-sub! |
230 | 303 | mpfr-mul! |
231 | 304 | mpfr-div! |
| 305 | + mpfr-hypot! |
| 306 | + mpfr-pow! |
| 307 | + mpfr-exp! |
| 308 | + mpfr-expm1! |
| 309 | + mpfr-sqrt! |
| 310 | + mpfr-sin! |
| 311 | + mpfr-cos! |
| 312 | + mpfr-tan! |
| 313 | + mpfr-cosu! |
| 314 | + mpfr-sinu! |
| 315 | + mpfr-tanu! |
| 316 | + mpfr-cbrt! |
| 317 | + mpfr-neg! |
| 318 | + mpfr-abs! |
| 319 | + mpfr-asin! |
| 320 | + mpfr-acos! |
| 321 | + mpfr-atan! |
| 322 | + mpfr-sinh! |
| 323 | + mpfr-cosh! |
| 324 | + mpfr-tanh! |
| 325 | + mpfr-asinh! |
| 326 | + mpfr-acosh! |
| 327 | + mpfr-atanh! |
| 328 | + mpfr-erf! |
| 329 | + mpfr-erfc! |
| 330 | + mpfr-log2! |
| 331 | + mpfr-log10! |
| 332 | + mpfr-log1p! |
| 333 | + mpfr-exp2! |
| 334 | + mpfr-rint! |
| 335 | + mpfr-round! |
| 336 | + mpfr-ceil! |
| 337 | + mpfr-floor! |
| 338 | + mpfr-trunc! |
| 339 | + mpfr-min! |
| 340 | + mpfr-max! |
| 341 | + mpfr-log! |
| 342 | + mpfr-const-pi! |
| 343 | + mpfr-atan2! |
232 | 344 | mpfr-set-prec! |
233 | | - mpfr-new! |
234 | 345 | mpfr-set!) |
0 commit comments