quad-fp: quadruple-precision floating point
| (require quad-fp) | package: quad-fp |
A toy Racket FFI binding to GCC’s libquadmath, exposing IEEE 754 quadruple-precision (128-bit, __float128) floating point — roughly 34 significant decimal digits, versus the ~16 of Racket’s native double flonums.
Values are opaque: a quad is shuttled across the FFI boundary as 128 bits and is only ever produced or consumed by the operations below.
The binding loads a native shared library (libquadf) that is compiled from source at install time, so a C toolchain with libquadmath must be present. See the package README for details.
1 Predicate
2 Conversion
procedure
(string->quad-flonum s) → Quad?
s : string?
procedure
(quad-flonum->string q [precision]) → string?
q : Quad? precision : exact-integer? = 36
procedure
(quad-flonum->bytes q) → bytes?
q : Quad?
3 Arithmetic
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
4 Elementary functions
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
5 Rounding
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
a : Quad?
procedure
(qfnearbyint a) → Quad?
a : Quad?
6 Special functions
7 Other binary functions
procedure
a : Quad? b : Quad?
procedure
(qfremainder a b) → Quad?
a : Quad? b : Quad?
procedure
(qfcopysign a b) → Quad?
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
(qfnextafter a b) → Quad?
a : Quad? b : Quad?
procedure
a : Quad?
procedure
a : Quad? b : Quad? c : Quad?
8 Comparison
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
procedure
a : Quad? b : Quad?
9 Classification
procedure
a : Quad?
procedure
(qfinfinite? a) → boolean?
a : Quad?
procedure
a : Quad?
procedure
(qfsignbit? a) → boolean?
a : Quad?
procedure
(qfsignaling? a) → boolean?
a : Quad?
10 Constants
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
11 Example
(require quad-fp) (define a (double-flonum->quad-flonum 1.0)) (define b (double-flonum->quad-flonum 1e-20)) ; In double, 1.0 + 1e-20 == 1.0; in quad the addend survives: (qf= (qf+ a b) a) ; => #f (quad-flonum->string (qf* quad-pi quad-pi)) ; => "9.86960440108935861883449099987615081"