231 lines
7.0 KiB
Plaintext
231 lines
7.0 KiB
Plaintext
### Floats
|
|
|
|
[
|
|
Datatype float-formats
|
|
Funcon binary32
|
|
Funcon binary64
|
|
Funcon binary128
|
|
Funcon decimal64
|
|
Funcon decimal128
|
|
Type floats
|
|
Funcon float
|
|
Funcon quiet-not-a-number Alias qNaN
|
|
Funcon signaling-not-a-number Alias sNaN
|
|
Funcon positive-infinity Alias pos-inf
|
|
Funcon negative-infinity Alias neg-inf
|
|
Funcon float-convert
|
|
Funcon decimal-float
|
|
Funcon float-equal
|
|
Funcon float-is-less
|
|
Funcon float-is-less-or-equal
|
|
Funcon float-is-greater
|
|
Funcon float-is-greater-or-equal
|
|
Funcon float-negate
|
|
Funcon float-absolute-value
|
|
Funcon float-add
|
|
Funcon float-subtract
|
|
Funcon float-multiply
|
|
Funcon float-multiply-add
|
|
Funcon float-divide
|
|
Funcon float-remainder
|
|
Funcon float-sqrt
|
|
Funcon float-integer-power
|
|
Funcon float-float-power
|
|
Funcon float-round-ties-to-even
|
|
Funcon float-round-ties-to-infinity
|
|
Funcon float-floor
|
|
Funcon float-ceiling
|
|
Funcon float-truncate
|
|
Funcon float-pi
|
|
Funcon float-e
|
|
Funcon float-log
|
|
Funcon float-log10
|
|
Funcon float-exp
|
|
Funcon float-sin
|
|
Funcon float-cos
|
|
Funcon float-tan
|
|
Funcon float-asin
|
|
Funcon float-acos
|
|
Funcon float-atan
|
|
Funcon float-sinh
|
|
Funcon float-cosh
|
|
Funcon float-tanh
|
|
Funcon float-asinh
|
|
Funcon float-acosh
|
|
Funcon float-atanh
|
|
Funcon float-atan2
|
|
]
|
|
|
|
/*
|
|
Floating-point numbers according to the IEEE 754 Standard (2008).
|
|
|
|
See:
|
|
- http://doi.org/10.1109/IEEESTD.2008.4610935
|
|
- https://en.wikipedia.org/wiki/IEEE_754
|
|
*/
|
|
|
|
Datatype
|
|
float-formats ::= binary32 | binary64 | binary128 | decimal64 | decimal128
|
|
Built-in Type
|
|
floats(_:float-formats)
|
|
/*
|
|
Note that for distinct formats `FF1`, `FF2`, the types `floats(FF1)` and
|
|
`floats(FF2)` are not necessarily disjoint.
|
|
*/
|
|
|
|
Built-in Funcon
|
|
float(FF:float-formats,
|
|
_:bounded-integers(0, 1), _:natural-numbers, _:integers) : =>floats(FF)
|
|
/*
|
|
Each finite number is described by three integers:
|
|
* s = a sign (zero or one),
|
|
* c = a significand (or 'coefficient'),
|
|
* q = an exponent.
|
|
The numerical value of a finite number is (-1)^s * c * b^q
|
|
where b is the base (2 or 10), also called radix.
|
|
|
|
The possible finite values that can be represented in a format
|
|
are determined by the base b, the number of digits in the significand
|
|
(precision p), and the exponent parameter emax:
|
|
* c must be an integer in the range zero through (b^p)-1
|
|
(e.g., if b=10 and p=7 then c is 0 through 9999999);
|
|
* q must be an integer such that 1-emax <= q+p-1 <= emax
|
|
(e.g., if p=7 and emax=96 then q is -101 through 90).
|
|
|
|
Note that `float(FF, S, C, Q)` is not a 1-1 operation.
|
|
*/
|
|
|
|
Built-in Funcon
|
|
quiet-not-a-number(FF:float-formats) : floats(FF)
|
|
Alias
|
|
qNaN = quiet-not-a-number
|
|
Built-in Funcon
|
|
signaling-not-a-number(FF:float-formats) : floats(FF)
|
|
Alias
|
|
sNaN = signaling-not-a-number
|
|
Built-in Funcon
|
|
positive-infinity(FF:float-formats) : floats(FF)
|
|
Alias
|
|
pos-inf = positive-infinity
|
|
Built-in Funcon
|
|
negative-infinity(FF:float-formats) : floats(FF)
|
|
Alias
|
|
neg-inf = negative-infinity
|
|
|
|
|
|
#### Conversions
|
|
|
|
Built-in Funcon
|
|
float-convert(FF1:float-formats,
|
|
FF2:float-formats, F:floats(FF1)) : =>floats(FF2)
|
|
Built-in Funcon
|
|
decimal-float(FF:float-formats,
|
|
_:strings, _:strings, _:strings) : =>floats(FF)
|
|
/*
|
|
`decimal-float(F, "M", "N", "E")` is an approximation in `floats(FF)` to the
|
|
value of 'M.N' times 10 to the power 'E', where "M.N" is decimal notation
|
|
(optionally-signed) for a fixed-point number and "E" is decimal notation
|
|
(optionally signed) for an integer. When any argument string is invalid,
|
|
the result is `quiet-not-a-number(F)`.
|
|
*/
|
|
|
|
|
|
#### Comparison
|
|
|
|
Built-in Funcon
|
|
float-equal(FF:float-formats,
|
|
_:floats(FF), _:floats(FF)) : =>booleans
|
|
Built-in Funcon
|
|
float-is-less(FF:float-formats,
|
|
_:floats(FF), _:floats(FF)) : =>booleans
|
|
Built-in Funcon
|
|
float-is-less-or-equal(FF:float-formats,
|
|
_:floats(FF), _:floats(FF)) : =>booleans
|
|
Built-in Funcon
|
|
float-is-greater(FF:float-formats,
|
|
_:floats(FF), _:floats(FF)) : =>booleans
|
|
Built-in Funcon
|
|
float-is-greater-or-equal(FF:float-formats,
|
|
_:floats(FF), _:floats(FF)) : =>booleans
|
|
|
|
|
|
#### Arithmetic
|
|
|
|
Built-in Funcon
|
|
float-negate(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-absolute-value(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-add(FF:float-formats, _:floats(FF), _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-subtract(FF:float-formats, _:floats(FF), _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-multiply(FF:float-formats, _:floats(FF), _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-multiply-add(FF:float-formats,
|
|
_:floats(FF), _:floats(FF), _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-divide(FF:float-formats, _:floats(FF), _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-remainder(FF:float-formats, _:floats(FF), _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-sqrt(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-integer-power(FF:float-formats, _:floats(FF), _:integers) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-float-power(FF:float-formats, _:floats(FF), _:floats(FF)) : =>floats(FF)
|
|
|
|
|
|
#### Rounding
|
|
|
|
Built-in Funcon
|
|
float-round-ties-to-even(FF:float-formats, _:floats(FF)) : =>integers
|
|
Built-in Funcon
|
|
float-round-ties-to-infinity(FF:float-formats, _:floats(FF)) : =>integers
|
|
Built-in Funcon
|
|
float-floor(FF:float-formats, _:floats(FF)) : =>integers
|
|
Built-in Funcon
|
|
float-ceiling(FF:float-formats, _:floats(FF)) : =>integers
|
|
Built-in Funcon
|
|
float-truncate(FF:float-formats, _:floats(FF)) : =>integers
|
|
|
|
|
|
#### Miscellaneous
|
|
|
|
Built-in Funcon
|
|
float-pi(FF:float-formats) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-e(FF:float-formats) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-log(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-log10(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-exp(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-sin(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-cos(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-tan(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-asin(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-acos(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-atan(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-sinh(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-cosh(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-tanh(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-asinh(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-acosh(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-atanh(FF:float-formats, _:floats(FF)) : =>floats(FF)
|
|
Built-in Funcon
|
|
float-atan2(FF:float-formats, _:floats(FF), _:floats(FF)) : =>floats(FF)
|