4.3.5 Extflonums (original) (raw)

4.3.5 Extflonums🔗

An extflonum is an extended-precision (80-bit) floating-point number. Extflonum arithmetic is supported on platforms with extended-precision hardware and where the extflonum implementation does not conflict with normal double-precision arithmetic (i.e., on x86 and x86_64 platforms when Racket is compiled to use SSE instructions for floating-point operations, and on Windows when "longdouble.dll"is available).

A extflonum is not a number in the sense ofnumber?. Only extflonum-specific operations such asextfl+ perform extflonum arithmetic.

A literal extflonum is written like an inexact number, but using an explicit t or T exponent marker (seeReading Extflonums). For example, 3.5t0 is an extflonum. The extflonum values for infinity are+inf.t and -inf.t. The extflonum value for not-a-number is +nan.t or-nan.t.

If (extflonum-available?) produces #f, then all operations exported by racket/extflonum raiseexn:fail:unsupported, except for extflonum?,extflonum-available?, and extflvector? (which always work). The reader (see The Reader) always accepts extflonum input; when extflonum operations are not supported, printing an extflonum from the reader uses its source notation (as opposed to normalizing the format).

Two extflonums are equal? along the same lines asflonums: when they are extfl= and have the same sign (which matters for -0.0t0 and +0.0t0), or when they are both +nan.t. If extflonums are not supported on a platform, extflonums are equal? only if they areeq?.

Returns #t if v is an extflonum, #fotherwise.

Returns #t if extflonum operations are supported on the current platform, #f otherwise.

4.3.5.1 Extflonum Arithmetic🔗
(extfl+ a b) → extflonum? a : extflonum? b : extflonum?
(extfl- a b) → extflonum? a : extflonum? b : extflonum?
(extfl* a b) → extflonum? a : extflonum? b : extflonum?
(extfl/ a b) → extflonum? a : extflonum? b : extflonum?
(extflabs a) → extflonum? a : extflonum?
(extflmin a b) → extflonum? a : extflonum? b : extflonum?
(extflmax a b) → extflonum? a : extflonum? b : extflonum?

Like flsin, flcos, fltan, flasin,flacos, flatan, fllog, flexp, andflsqrt, and flexpt, but for extflonums.

Changed in version 7.7.0.8 of package base: Changed extfl->fx to truncate.

4.3.5.2 Extflonum Constants🔗

Like pi, but with 80 bits precision.

4.3.5.3 Extflonum Vectors🔗

An extflvector is like an flvector, but it holds onlyextflonums. See also Unsafe Extflonum Operations.

Two extflvectors are equal? if they have the same length, and if the values in corresponding slots of the extflvectors areequal?.

(for/extflvector maybe-length (for-clause ...) body ...)
(for*/extflvector maybe-length (for-clause ...) body ...) maybe-length = | #:length length-expr #:length length-expr #:fill fill-expr length-expr : exact-nonnegative-integer? fill-expr : extflonum?
4.3.5.4 Extflonum Byte Strings🔗

Like floating-point-bytes->real, but for extflonums: Converts the extended-precision floating-point number encoded inbstr from position start (inclusive) to end(exclusive) to an extflonum. The difference betweenstart an end must be 10 bytes.