cljs.math/next-down
function | since v1.11.50 | Edit |
(next-down d)
Source docstring:
Returns the adjacent double of d in the direction of ##-Inf.
If d is ##NaN => ##NaN
If d is ##Inf => Number/MAX_VALUE
If d is zero => -Number/MIN_VALUE
See: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#nextDown-double-
(defn ^number next-down
{:added "1.11.10"}
[d]
(cond
(or ^boolean (js/isNaN d) (== ##-Inf d)) d
(zero? d) (- js/Number.MIN_VALUE)
:default
(let [a (js/ArrayBuffer. 8)
f (js/Float64Array. a)
i (js/Uint32Array. a)
_ (aset f 0 d)
ht (aget i HI)
lt (aget i LO)
[hr lr] (if (> d 0)
(add64 ht lt 0xFFFFFFFF 0xFFFFFFFF)
(add64 ht lt 0 1))]
(aset i HI hr)
(aset i LO lr)
(aget f 0))))