module double
import parse
import int32
extern import
c file "double-inline.h"
js file "double-inline.js"
pub val pistd/num/double/pi: double = 0x1.9_21FB_5444_2D18p+1
pub val dbl-pistd/num/double/dbl-pi: double = pistd/num/double/pi: double
pub val dbl-twopistd/num/double/dbl-twopi: double = 0x1.9_21FB_5444_2D18p+2
pub val dbl-pi2std/num/double/dbl-pi2: double = 0x1.9_21FB_5444_2D18p+0
pub val dbl-pi4std/num/double/dbl-pi4: double = 0x1.9_21FB_5444_2D18p-1
pub val dbl-pi34std/num/double/dbl-pi34: double =0x1.2_D97C_7F33_21D2p+1
pub val dbl-estd/num/double/dbl-e: double = 0x1.5_BF0A_8B14_5769p+1
pub val dbl-log2std/num/double/dbl-log2: double = 0x1.6_2E42_FEFA_39EFp-1
pub val dbl-log10std/num/double/dbl-log10: double = 0x1.2_6BB1_BBB5_5516p+1
pub val dbl-log2estd/num/double/dbl-log2e: double = 0x1.7_1547_652B_82FEp+0
pub val dbl-log10estd/num/double/dbl-log10e: double = 0x1.B_CB7B_1526_E50Ep-2
pub val dbl-sqrt2std/num/double/dbl-sqrt2: double = 0x1.6_A09E_667F_3BCDp+0
pub val dbl-sqrt12std/num/double/dbl-sqrt12: double = 0x1.6_A09E_667F_3BCDp-1
pub val dbl-eulerstd/num/double/dbl-euler: double = 0x1.2_788C_FC6F_B619p-1
pub val dbl-maxstd/num/double/dbl-max: double = 0x1.F_FFFF_FFFF_FFFFp+1023
pub val dbl-minstd/num/double/dbl-min: double = 0x1.0p-1022
pub val dbl-true-minstd/num/double/dbl-true-min: double= 0x1.0p-1074
pub val dbl-epsilonstd/num/double/dbl-epsilon: double = 0x1.0p-52
pub val dbl-max-precstd/num/double/dbl-max-prec: int= 15
pub val nanstd/num/double/nan: double : doublestd/core/types/double: V = make-nanstd/num/double/make-nan: () -> double()
pub val posinfstd/num/double/posinf: double : doublestd/core/types/double: V = make-posinfstd/num/double/make-posinf: () -> double()
pub val neginfstd/num/double/neginf: double : doublestd/core/types/double: V = make-neginfstd/num/double/make-neginf: () -> double()
extern make-nanstd/num/double/make-nan: () -> double() : doublestd/core/types/double: V
c inline "(double)NAN"
cs inline "double.NaN"
js inline "NaN"
extern make-posinfstd/num/double/make-posinf: () -> double() : doublestd/core/types/double: V
c inline "HUGE_VAL"
cs inline "double.PositiveInfinity"
js inline "Infinity"
extern make-neginfstd/num/double/make-neginf: () -> double() : doublestd/core/types/double: V
c inline "-HUGE_VAL"
cs inline "double.NegativeInfinity"
js inline "-Infinity"
pub inline extern is-nanstd/num/double/is-nan: (d : double) -> bool(d:doublestd/core/types/double: V) : boolstd/core/types/bool: V
c inline "isnan(#1)"
cs "double.IsNaN"
js "isNaN"
pub extern is-infstd/num/double/is-inf: (d : double) -> bool(dd: double:doublestd/core/types/double: V) : boolstd/core/types/bool: V
c inline "isinf(#1)"
cs "double.IsInfinity"
js inline "((#1) === Infinity || (#1) === -Infinity)"
pub inline extern is-posinfstd/num/double/is-posinf: (d : double) -> bool(d:doublestd/core/types/double: V) : boolstd/core/types/bool: V
c inline "(isinf(#1) && !signbit(#1))"
cs "double.IsPositiveInfinity"
js inline "((#1) === Infinity)"
pub inline extern is-neginfstd/num/double/is-neginf: (d : double) -> bool(d:doublestd/core/types/double: V) : boolstd/core/types/bool: V
c inline "(isinf(#1) && signbit(#1))"
cs "double.IsNegativeInfinity"
js inline "((#1) === -Infinity)"
pub inline extern is-finitestd/num/double/is-finite: (d : double) -> bool( d : doublestd/core/types/double: V ) : boolstd/core/types/bool: V
c inline "isfinite(#1)"
cs inline "(!double.IsNaN(#1) && !double.IsInfinity(#1))"
js "isFinite"
pub fun is-negzerostd/num/double/is-negzero: (d : double) -> bool( dd: double : doublestd/core/types/double: V ) : boolstd/core/types/bool: V
(dd: double==std/core/(==).2: (double, double) -> bool0.0 &&std/core/types/(&&): (x : bool, y : bool) -> bool is-neginfstd/num/double/is-neginf: (d : double) -> bool(1.0 /std/core/(/).1: (double, double) -> double dd: double))
pub fun is-subnormalstd/num/double/is-subnormal: (d : double) -> bool( dd: double :doublestd/core/types/double: V ) : boolstd/core/types/bool: V
(dd: double !=std/core/(!=).2: (double, double) -> bool 0.0 &&std/core/types/(&&): (x : bool, y : bool) -> bool dd: double.absstd/core/abs.1: (d : double) -> double <std/core/(<).4: (double, double) -> bool dbl-minstd/num/double/dbl-min: double)
pub inline extern roundstd/num/double/round: (d : double) -> double(d:doublestd/core/types/double: V) : doublestd/core/types/double: V
c "round" cs "Math.Round"
js "$std_core._double_round"
pub inline extern floorstd/num/double/floor: (d : double) -> double(d:doublestd/core/types/double: V) : doublestd/core/types/double: V
c "floor"
cs "Math.Floor"
js "Math.floor"
pub inline extern ceilingstd/num/double/ceiling: (d : double) -> double : (d:doublestd/core/types/double: V) -> doublestd/core/types/double: V
c "ceil"
cs "Math.Ceiling"
js "Math.ceil"
pub fun truncatestd/num/double/truncate: (d : double) -> double(dd: double : doublestd/core/types/double: V) : doublestd/core/types/double: V
if dd: double >=std/core/(>=).3: (double, double) -> bool 0.0 then floorstd/num/double/floor: (d : double) -> double(dd: double) else ceilingstd/num/double/ceiling: (d : double) -> double(dd: double)
pub fun fractionstd/num/double/fraction: (d : double) -> double(dd: double : doublestd/core/types/double: V) : doublestd/core/types/double: V
dd: double -std/core/(-).2: (double, double) -> double dd: double.truncatestd/num/double/truncate: (d : double) -> double
pub fun ffractionstd/num/double/ffraction: (d : double) -> double(dd: double : doublestd/core/types/double: V) : doublestd/core/types/double: V
dd: double -std/core/(-).2: (double, double) -> double dd: double.floorstd/num/double/floor: (d : double) -> double
pub fun round-to-precstd/num/double/round-to-prec: (d : double, prec : int) -> double( dd: double : doublestd/core/types/double: V, precprec: int : intstd/core/types/int: V ) : doublestd/core/types/double: V
if precprec: int <=std/core/(<=).1: (x : int, y : int) -> bool 0 then dd: double.roundstd/num/double/round: (d : double) -> double else
val pp: double = exp10std/num/double/exp10: (p : double) -> double(precprec: int.doublestd/core/double: (i : int) -> double)
(dd: double *std/core/(*).1: (double, double) -> double pp: double).roundstd/num/double/round: (d : double) -> double /std/core/(/).1: (double, double) -> double pp: double
pub extern fmaddstd/num/double/fmadd: (x : double, y : double, z : double) -> double( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V, zz: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "fma"
js "_fmadd"
cs "Math.FusedMultiplyAdd"
pub inline extern sqrtstd/num/double/sqrt: (d : double) -> double(d:doublestd/core/types/double: V) : doublestd/core/types/double: V
c "sqrt"
cs "Math.Sqrt"
js "Math.sqrt"
pub inline extern powstd/num/double/pow: (d : double, p : double) -> double(d:doublestd/core/types/double: V, p:doublestd/core/types/double: V) : doublestd/core/types/double: V
c "pow"
cs "Math.Pow"
js "Math.pow"
pub inline extern logstd/num/double/log: (d : double) -> double(d:doublestd/core/types/double: V) : doublestd/core/types/double: V
c "log"
cs "Math.Log"
js "Math.log"
pub fun log10std/num/double/log10: (d : double) -> double( dd: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
logstd/num/double/log: (d : double) -> double(dd: double) /std/core/(/).1: (double, double) -> double dbl-log10std/num/double/dbl-log10: double
pub fun log2std/num/double/log2: (d : double) -> double( dd: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
logstd/num/double/log: (d : double) -> double(dd: double) /std/core/(/).1: (double, double) -> double dbl-log2std/num/double/dbl-log2: double
pub inline extern expstd/num/double/exp: (p : double) -> double( p : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "exp"
cs "Math.Exp"
js "Math.exp"
pub fun exp10std/num/double/exp10: (p : double) -> double( pp: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
powstd/num/double/pow: (d : double, p : double) -> double(10.0,pp: double)
pub fun exp2std/num/double/exp2: (p : double) -> double( pp: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
powstd/num/double/pow: (d : double, p : double) -> double(2.0,pp: double)
fun log2p1std/num/double/log2p1: (x : double) -> double( xx: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
dbl-log2estd/num/double/dbl-log2e: double *std/core/(*).1: (double, double) -> double log1pstd/num/double/log1p: (d : double) -> double(xx: double)
fun exp2m1std/num/double/exp2m1: (x : double) -> double( xx: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
expm1std/num/double/expm1: (d : double) -> double(dbl-log2std/num/double/dbl-log2: double *std/core/(*).1: (double, double) -> double xx: double)
pub fun logaddexpstd/num/double/logaddexp: (x : double, y : double) -> double( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
if xx: double==std/core/(==).2: (double, double) -> boolyy: double then xx: double +std/core/(+).2: (double, double) -> double dbl-log2std/num/double/dbl-log2: double else
val zz: double = xx: double -std/core/(-).2: (double, double) -> double yy: double
if zz: double >std/core/(>).2: (double, double) -> bool 0.0 then xx: double +std/core/(+).2: (double, double) -> double log1pstd/num/double/log1p: (d : double) -> double(expstd/num/double/exp: (p : double) -> double(~std/core/(~).1: (d : double) -> doublezz: double))
else yy: double +std/core/(+).2: (double, double) -> double log1pstd/num/double/log1p: (d : double) -> double(expstd/num/double/exp: (p : double) -> double(zz: double))
pub fun logaddexp2std/num/double/logaddexp2: (x : double, y : double) -> double( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
if xx: double==std/core/(==).2: (double, double) -> boolyy: double then xx: double +std/core/(+).2: (double, double) -> double 1.0 else
val zz: double = xx: double -std/core/(-).2: (double, double) -> double yy: double
if zz: double >std/core/(>).2: (double, double) -> bool 0.0 then xx: double +std/core/(+).2: (double, double) -> double log2p1std/num/double/log2p1: (x : double) -> double(exp2std/num/double/exp2: (p : double) -> double(~std/core/(~).1: (d : double) -> doublezz: double))
else yy: double +std/core/(+).2: (double, double) -> double log2p1std/num/double/log2p1: (x : double) -> double(exp2std/num/double/exp2: (p : double) -> double(zz: double))
pub fun nearly-eqstd/num/double/nearly-eq: (x : double, y : double, epsilon : ?double) -> bool( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V, epsilonepsilon: ?double : doublestd/core/types/optional: V -> V = 8.0*std/core/(*).1: (double, double) -> doubledbl-epsilonstd/num/double/dbl-epsilon: double ) : boolstd/core/types/bool: V
if xx: double ==std/core/(==).2: (double, double) -> bool yy: double returnreturn: bool Truestd/core/types/True: bool
val diffdiff: double = (xx: double -std/core/(-).2: (double, double) -> double yy: double).absstd/core/abs.1: (d : double) -> double
if xx: double==std/core/(==).2: (double, double) -> bool0.0 ||std/core/types/(||): (x : bool, y : bool) -> bool yy: double==std/core/(==).2: (double, double) -> bool0.0 ||std/core/types/(||): (x : bool, y : bool) -> bool diffdiff: double <std/core/(<).4: (double, double) -> bool dbl-minstd/num/double/dbl-min: double then
(2.0*std/core/(*).1: (double, double) -> doublediffdiff: double <std/core/(<).4: (double, double) -> bool (epsilonepsilon: double *std/core/(*).1: (double, double) -> double dbl-minstd/num/double/dbl-min: double))
else
val sumsum: double = xx: double.absstd/core/abs.1: (d : double) -> double +std/core/(+).2: (double, double) -> double yy: double.absstd/core/abs.1: (d : double) -> double
((2.0*std/core/(*).1: (double, double) -> doublediffdiff: double /std/core/(/).1: (double, double) -> double (if sumsum: double >std/core/(>).2: (double, double) -> bool dbl-maxstd/num/double/dbl-max: double then dbl-maxstd/num/double/dbl-max: double else sumsum: double)) <std/core/(<).4: (double, double) -> bool epsilonepsilon: double)
pub fun (~=)std/num/double/(~=): (x : double, y : double) -> bool(xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V ) : boolstd/core/types/bool: V
nearly-eqstd/num/double/nearly-eq: (x : double, y : double, epsilon : ?double) -> bool(xx: double,yy: double)
pub extern double-to-bitsstd/num/double/double-to-bits: (d : double) -> (int32, int32)( dd: double : doublestd/core/types/double: V ) : (std/core/types/(,): (V, V) -> Vint32std/core/types/int32: V,int32std/core/types/int32: V)std/core/types/(,): (V, V) -> V
c "kk_double_to_bits"
cs "Primitive.DoubleToBits"
js "_double_to_bits"
pub extern double-from-bitsstd/num/double/double-from-bits: (lo : int32, hi : int32) -> double( lolo: int32 : int32std/core/types/int32: V, hihi: int32 : int32std/core/types/int32: V ) : doublestd/core/types/double: V
c "kk_double_from_bits"
cs "Primitive.DoubleFromBits"
js "_double_from_bits"
pub fun exp2std/num/double/exp2.1: (e : int) -> double( ee: int : intstd/core/types/int: V ) : doublestd/core/types/double: V
if ee: int >=std/core/(>=).1: (x : int, y : int) -> bool -1022 &&std/core/types/(&&): (x : bool, y : bool) -> bool ee: int <=std/core/(<=).1: (x : int, y : int) -> bool 1023
then double-from-bitsstd/num/double/double-from-bits: (lo : int32, hi : int32) -> double(zerostd/num/int32/zero: int32, (1023 +std/core/(+).4: (x : int, y : int) -> int ee: int).int32std/core/int32: (i : int) -> int32.shlstd/num/int32/shl: (int32, int32) -> int32(20.int32std/core/int32: (i : int) -> int32))
else exp2std/num/double/exp2: (p : double) -> double( ee: int.doublestd/core/double: (i : int) -> double )
pub fun encodestd/num/double/encode: (man : int, exp : int) -> double( manman: int : intstd/core/types/int: V, expexp: int : intstd/core/types/int: V ) : doublestd/core/types/double: V
ldexpstd/num/double/ldexp: (x : double, e : int) -> double(manman: int.doublestd/core/double: (i : int) -> double,expexp: int)
val one-p1023std/num/double/one-p1023: double = 0x1.0p1023
val one-m1022std/num/double/one-m1022: double = 0x1.0p-1022
fun mul-exp2std/num/double/mul-exp2: (x : double, e : int) -> double( xx: double : doublestd/core/types/double: V, ee: int : intstd/core/types/int: V ) : doublestd/core/types/double: V
xx: double *std/core/(*).1: (double, double) -> double exp2std/num/double/exp2.1: (e : int) -> double(ee: int)
pub fun ldexpstd/num/double/ldexp: (x : double, e : int) -> double( xx: double : doublestd/core/types/double: V, ee: int : intstd/core/types/int: V ) : doublestd/core/types/double: V
if !std/core/types/(!).1: (b : bool) -> boolis-finitestd/num/double/is-finite: (d : double) -> bool(xx: double) then xx: double
elif ee: int >=std/core/(>=).1: (x : int, y : int) -> bool -1022 then
if ee: int <=std/core/(<=).1: (x : int, y : int) -> bool 1023 then mul-exp2std/num/double/mul-exp2: (x : double, e : int) -> double(xx: double,ee: int) elif ee: int <=std/core/(<=).1: (x : int, y : int) -> bool 2046 then mul-exp2std/num/double/mul-exp2: (x : double, e : int) -> double( xx: double*std/core/(*).1: (double, double) -> doubleone-p1023std/num/double/one-p1023: double, ee: int -std/core/(-).4: (x : int, y : int) -> int 1023 )
elif ee: int <=std/core/(<=).1: (x : int, y : int) -> bool 3069 then mul-exp2std/num/double/mul-exp2: (x : double, e : int) -> double( xx: double*std/core/(*).1: (double, double) -> doubleone-p1023std/num/double/one-p1023: double*std/core/(*).1: (double, double) -> doubleone-p1023std/num/double/one-p1023: double, ee: int -std/core/(-).4: (x : int, y : int) -> int 2046 )
elif xx: double <std/core/(<).4: (double, double) -> bool 0.0 then neginfstd/num/double/neginf: double else posinfstd/num/double/posinf: double
else
if ee: int >=std/core/(>=).1: (x : int, y : int) -> bool -2044 then mul-exp2std/num/double/mul-exp2: (x : double, e : int) -> double(xx: double*std/core/(*).1: (double, double) -> doubleone-m1022std/num/double/one-m1022: double, ee: int +std/core/(+).4: (x : int, y : int) -> int 1022)
elif ee: int >=std/core/(>=).1: (x : int, y : int) -> bool -3066 then mul-exp2std/num/double/mul-exp2: (x : double, e : int) -> double(xx: double*std/core/(*).1: (double, double) -> doubleone-m1022std/num/double/one-m1022: double*std/core/(*).1: (double, double) -> doubleone-m1022std/num/double/one-m1022: double, ee: int +std/core/(+).4: (x : int, y : int) -> int 2044 )
elif xx: double <std/core/(<).4: (double, double) -> bool 0.0 then -0.0 else 0.0
pub fun decodestd/num/double/decode: (d : double) -> (int, int)( dd: double : doublestd/core/types/double: V ) : (std/core/types/(,): (V, V) -> Vintstd/core/types/int: V,intstd/core/types/int: V)std/core/types/(,): (V, V) -> V
if dd: double==std/core/(==).2: (double, double) -> bool0.0 then (std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)0,0)std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)
elif dd: double.is-subnormalstd/num/double/is-subnormal: (d : double) -> bool then decode-normalizedstd/num/double/decode-normalized: (d : double, e-adjust : ?int) -> (int, int)(dd: double *std/core/(*).1: (double, double) -> double 0x1.0p54, -54)
else decode-normalizedstd/num/double/decode-normalized: (d : double, e-adjust : ?int) -> (int, int)(dd: double,0)
fun decode-normalizedstd/num/double/decode-normalized: (d : double, e-adjust : ?int) -> (int, int)( dd: double : doublestd/core/types/double: V, e-adjuste-adjust: ?int : intstd/core/types/optional: V -> V = 0 ) : (std/core/types/(,): (V, V) -> Vintstd/core/types/int: V,intstd/core/types/int: V)std/core/types/(,): (V, V) -> V
val (std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)lolo: int32,hihi: int32)std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b) = double-to-bitsstd/num/double/double-to-bits: (d : double) -> (int32, int32)(dd: double)
val signsign: int = if hihi: int32.is-negstd/num/int32/is-neg: (i : int32) -> bool then -1 else 1
val expexp: int = andstd/num/int32/and: (int32, int32) -> int32(hihi: int32.shrstd/num/int32/shr: (int32, int32) -> int32(20.int32std/core/int32: (i : int) -> int32),0x7FF.int32std/core/int32: (i : int) -> int32).intstd/core/int.1: (i : int32) -> int -std/core/(-).4: (x : int, y : int) -> int 1043
val manman: int = andstd/num/int32/and: (int32, int32) -> int32(hihi: int32,0xFFFFF.int32std/core/int32: (i : int) -> int32).intstd/core/int.1: (i : int32) -> int +std/core/(+).4: (x : int, y : int) -> int 0x100000
(std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)signsign: int*std/core/(*): (int, int) -> int(manman: int *std/core/(*): (int, int) -> int 0x100000000 +std/core/(+).4: (x : int, y : int) -> int lolo: int32.uintstd/num/int32/uint: (i : int32) -> int), expexp: int -std/core/(-).4: (x : int, y : int) -> int 32 +std/core/(+).4: (x : int, y : int) -> int e-adjuste-adjust: int)std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)
pub fun frexpstd/num/double/frexp: (x : double) -> (double, int)( xx: double : doublestd/core/types/double: V ) : (std/core/types/(,): (V, V) -> Vdoublestd/core/types/double: V, intstd/core/types/int: V)std/core/types/(,): (V, V) -> V
if !std/core/types/(!).1: (b : bool) -> boolxx: double.is-finitestd/num/double/is-finite: (d : double) -> bool ||std/core/types/(||): (x : bool, y : bool) -> bool xx: double.is-negzerostd/num/double/is-negzero: (d : double) -> bool returnreturn: (double, int) (std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)xx: double,0)std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)
val (std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)mm: int,ee: int)std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b) = xx: double.decodestd/num/double/decode: (d : double) -> (int, int)
(std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)mm: int.doublestd/core/double: (i : int) -> double *std/core/(*).1: (double, double) -> double 0x1.0p-53, ee: int +std/core/(+).4: (x : int, y : int) -> int 53 )std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)
pub fun show-hexstd/num/double/show-hex: (d : double, width : ?int, use-capitals : ?bool, pre : ?string) -> string( dd: double : doublestd/core/types/double: V, widthwidth: ?int : intstd/core/types/optional: V -> V = 1, use-capitalsuse-capitals: ?bool : boolstd/core/types/optional: V -> V = Truestd/core/types/True: bool, prepre: ?string : stringstd/core/types/optional: V -> V = "0x" ) : stringstd/core/types/string: V
if !std/core/types/(!).1: (b : bool) -> booldd: double.is-finitestd/num/double/is-finite: (d : double) -> bool then dd: double.showstd/core/show.1: (d : double, precision : ?int) -> string else
val (std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b)mm: int,ee: int)std/core/types/(,): forall<a,b> (fst : a, snd : b) -> (a, b) = dd: double.decodestd/num/double/decode: (d : double) -> (int, int)
val manman: string = mm: int.absstd/core/abs: (i : int) -> int.show-hexstd/core/show-hex: (i : int, width : ?int, use-capitals : ?bool, pre : ?string) -> string(1,use-capitalsuse-capitals: bool,"")
val exp0exp0: int = ee: int +std/core/(+).4: (x : int, y : int) -> int 4*std/core/(*): (int, int) -> int(manman: string.countstd/core/count.1: (s : string) -> int -std/core/(-).4: (x : int, y : int) -> int 1)
val expexp: string = (if exp0exp0: int >=std/core/(>=).1: (x : int, y : int) -> bool 0 then "+" else "") ++std/core/(++).1: (x : string, y : string) -> string exp0exp0: int.showstd/core/show: (i : int) -> string
val fracfrac: string = manman: string.tailstd/core/tail.2: (s : string) -> string.trim-rightstd/core/trim-right.1: (s : string, sub : string) -> string("0").pad-rightstd/core/pad-right: (s : string, width : int, fill : ?char) -> string(maxstd/core/max: (i : int, j : int) -> int(1,widthwidth: int),'0')
val signsign: string = if dd: double.is-negstd/core/is-neg.3: (d : double) -> bool ||std/core/types/(||): (x : bool, y : bool) -> bool dd: double.is-negzerostd/num/double/is-negzero: (d : double) -> bool then "-" else ""
signsign: string ++std/core/(++).1: (x : string, y : string) -> string prepre: string ++std/core/(++).1: (x : string, y : string) -> string manman: string.headstd/core/head.3: (s : string) -> string ++std/core/(++).1: (x : string, y : string) -> string "." ++std/core/(++).1: (x : string, y : string) -> string fracfrac: string ++std/core/(++).1: (x : string, y : string) -> string "p" ++std/core/(++).1: (x : string, y : string) -> string expexp: string
pub fun parse-doublestd/num/double/parse-double: (s : string) -> maybe<double>( ss: string : stringstd/core/types/string: V ) : maybestd/core/types/maybe: V -> V<doublestd/core/types/double: V>
ss: string.trimstd/core/trim: (s : string) -> string.to-lowerstd/core/to-lower: (s : string) -> string.slicestd/core/slice: (s : string) -> sslice.parse-eofstd/text/parse/parse-eof: forall<a,e> (input : sslice, p : () -> <parse|e> a) -> e parse-error<a>(pdoublestd/num/double/pdouble: () -> parse double).maybestd/text/parse/maybe: forall<a> (perr : parse-error<a>) -> maybe<a>
pub fun pdoublestd/num/double/pdouble: () -> parse double() : parsestd/text/parse/parse: HX doublestd/core/types/double: V
val negneg: bool = signstd/text/parse/sign: () -> parse bool()
val dd: double = [std/core/Cons: forall<a> (head : a, tail : list<a>) -> list<a>{ phexdoublestd/num/double/phexdouble: () -> parse double() }, { pdecdoublestd/num/double/pdecdouble: () -> parse double() }, { pspecialstd/num/double/pspecial: () -> parse double() }, { 0.0 }]std/core/Nil: forall<a> list<a>.choosestd/text/parse/choose: forall<a,e> (ps : list<parser<e,a>>) -> <parse|e> a
if negneg: bool then ~std/core/(~).1: (d : double) -> doubledd: double else dd: double
fun phexdoublestd/num/double/phexdouble: () -> parse double() : parsestd/text/parse/parse: HX doublestd/core/types/double: V
charstd/text/parse/char: (c : char) -> parse char('0')
one-ofstd/text/parse/one-of: (chars : string) -> parse char("xX")
val manman: string = hex-digitsstd/text/parse/hex-digits: () -> parse string()
val fracfrac: string = optionalstd/text/parse/optional: forall<a,e> (default : a, p : parser<e,a>) -> <parse|e> a( "", { charstd/text/parse/char: (c : char) -> parse char('.'); hex-digitsstd/text/parse/hex-digits: () -> parse string() }).trim-rightstd/core/trim-right.1: (s : string, sub : string) -> string("0")
val expexp: int : intstd/core/types/int: V = optionalstd/text/parse/optional: forall<a,e> (default : a, p : parser<e,a>) -> <parse|e> a( 0, { one-ofstd/text/parse/one-of: (chars : string) -> parse char("pP"); pintstd/text/parse/pint: () -> parse int() })
val mm: int : intstd/core/types/int: V = (manman: string ++std/core/(++).1: (x : string, y : string) -> string fracfrac: string).parse-intstd/core/parse-int: (s : string, hex : ?bool) -> maybe<int>(hex=Truestd/core/types/True: bool).defaultstd/core/default: forall<a> (m : maybe<a>, nothing : a) -> a(0)
val ee: int : intstd/core/types/int: V = expexp: int -std/core/(-).4: (x : int, y : int) -> int 4*std/core/(*): (int, int) -> intfracfrac: string.countstd/core/count.1: (s : string) -> int
encodestd/num/double/encode: (man : int, exp : int) -> double(mm: int,ee: int)
fun pdecdoublestd/num/double/pdecdouble: () -> parse double() : parsestd/text/parse/parse: HX doublestd/core/types/double: V
val curcur: sslice = current-inputstd/text/parse/current-input: () -> parse sslice()
val manman: string = digitsstd/text/parse/digits: () -> parse string()
val fracfrac: string = optionalstd/text/parse/optional: forall<a,e> (default : a, p : parser<e,a>) -> <parse|e> a("", { charstd/text/parse/char: (c : char) -> parse char('.'); digits0std/text/parse/digits0: () -> parse string() }).trim-rightstd/core/trim-right.1: (s : string, sub : string) -> string("0")
val expexp: int : intstd/core/types/int: V = optionalstd/text/parse/optional: forall<a,e> (default : a, p : parser<e,a>) -> <parse|e> a( 0, { one-ofstd/text/parse/one-of: (chars : string) -> parse char("eE"); pintstd/text/parse/pint: () -> parse int() })
curcur: sslice.stringstd/core/string.3: (slice : sslice) -> string.prim-parse-doublestd/num/double/prim-parse-double: (s : string) -> double
fun pspecialstd/num/double/pspecial: () -> parse double() : parsestd/text/parse/parse: HX doublestd/core/types/double: V
[std/core/Cons: forall<a> (head : a, tail : list<a>) -> list<a>{ pstringstd/text/parse/pstring: (s : string) -> parse string("nan"); nanstd/num/double/nan: double },
{ pstringstd/text/parse/pstring: (s : string) -> parse string("infinity"); posinfstd/num/double/posinf: double },
{ pstringstd/text/parse/pstring: (s : string) -> parse string("inf"); posinfstd/num/double/posinf: double }
]std/core/Nil: forall<a> list<a>.choosestd/text/parse/choose: forall<a,e> (ps : list<parser<e,a>>) -> <parse|e> a
extern prim-parse-doublestd/num/double/prim-parse-double: (s : string) -> double( ss: string : stringstd/core/types/string: V ) : doublestd/core/types/double: V
c "kk_prim_parse_double"
cs "Primitive.DoubleParse"
js "parseFloat"
pub fun sumstd/num/double/sum: (xs : list<double>) -> double( xsxs: list<double> : liststd/core/list: V -> V<doublestd/core/types/double: V> ) : doublestd/core/types/double: V
varstd/core/hnd/local-var: forall<a,b,e,h> (init : a, action : (l : local-var<h,a>) -> <local<h>|e> b) -> <local<h>|e> b totalstd/core/types/local-scope: forall<a,e> (action : forall<h> () -> <local<h>|e> a) -> e a := 0.0
varstd/core/hnd/local-var: forall<a,b,e,h> (init : a, action : (l : local-var<h,a>) -> <local<h>|e> b) -> <local<h>|e> b compcomp: local-var<$338,double> := 0.0
xsxs: list<double>.foreachstd/core/foreach: forall<a,e> (xs : list<a>, action : (a) -> e ()) -> e () fn(xx: double)
val tt: double = totaltotal: double +std/core/(+).2: (double, double) -> double xx: double
val cc: double = if totaltotal: double.absstd/core/abs.1: (d : double) -> double >=std/core/(>=).3: (double, double) -> bool xx: double.absstd/core/abs.1: (d : double) -> double then (totaltotal: double -std/core/(-).2: (double, double) -> double tt: double) +std/core/(+).2: (double, double) -> double xx: double else (xx: double -std/core/(-).2: (double, double) -> double tt: double) +std/core/(+).2: (double, double) -> double totaltotal: double
compcomp: local-var<$338,double> :=std/core/types/local-set: forall<a,e,h> (v : local-var<h,a>, assigned : a) -> <local<h>|e> () compcomp: double +std/core/(+).2: (double, double) -> double cc: double
totaltotal: local-var<$338,double> :=std/core/types/local-set: forall<a,e,h> (v : local-var<h,a>, assigned : a) -> <local<h>|e> () tt: double
totaltotal: double +std/core/(+).2: (double, double) -> double compcomp: double;
pub fun hypotstd/num/double/hypot: (x : double, y : double) -> double( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
val xxxx: double = absstd/core/abs.1: (d : double) -> double(xx: double)
val yyyy: double = absstd/core/abs.1: (d : double) -> double(yy: double)
val lolo: double = minstd/core/min.1: (x : double, y : double) -> double(xxxx: double,yyyy: double)
val hihi: double = maxstd/core/max.1: (x : double, y : double) -> double(xxxx: double,yyyy: double)
if hihi: double==std/core/(==).2: (double, double) -> bool0.0 then 0.0 else
val zz: double = lolo: double /std/core/(/).1: (double, double) -> double hihi: double
hihi: double *std/core/(*).1: (double, double) -> double sqrtstd/num/double/sqrt: (d : double) -> double( 1.0 +std/core/(+).2: (double, double) -> double zz: double*std/core/(*).1: (double, double) -> doublezz: double )
pub fun hypotstd/num/double/hypot.1: (x : double, y : double, z : double) -> double( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V, zz: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
val xxxx: double = absstd/core/abs.1: (d : double) -> double(xx: double)
val yyyy: double = absstd/core/abs.1: (d : double) -> double(yy: double)
val zzzz: double = absstd/core/abs.1: (d : double) -> double(zz: double)
val hihi: double = maxstd/core/max.1: (x : double, y : double) -> double(maxstd/core/max.1: (x : double, y : double) -> double(xxxx: double,yyyy: double),zzzz: double)
if hihi: double==std/core/(==).2: (double, double) -> bool0.0 then 0.0 else
hihi: double *std/core/(*).1: (double, double) -> double sqrtstd/num/double/sqrt: (d : double) -> double( sqrstd/num/double/sqr: (x : double) -> double(xxxx: double /std/core/(/).1: (double, double) -> double hihi: double) +std/core/(+).2: (double, double) -> double sqrstd/num/double/sqr: (x : double) -> double(yyyy: double /std/core/(/).1: (double, double) -> double hihi: double) +std/core/(+).2: (double, double) -> double sqrstd/num/double/sqr: (x : double) -> double(zzzz: double /std/core/(/).1: (double, double) -> double hihi: double) )
pub fun hypotstd/num/double/hypot.2: (xs : list<double>) -> double( xsxs: list<double> : liststd/core/list: V -> V<doublestd/core/types/double: V> ) : doublestd/core/types/double: V
val hihi: double = xsxs: list<double>.abs-maxstd/num/double/abs-max.1: (xs : list<double>) -> double
if hihi: double==std/core/(==).2: (double, double) -> bool0.0 then 0.0 else
hihi: double *std/core/(*).1: (double, double) -> double xsxs: list<double>.mapstd/core/map.5: forall<a,b,e> (xs : list<a>, f : (a) -> e b) -> e list<b>( fn(xx: double) sqrstd/num/double/sqr: (x : double) -> double(xx: double /std/core/(/).1: (double, double) -> double hihi: double) ).sumstd/num/double/sum: (xs : list<double>) -> double.sqrtstd/num/double/sqrt: (d : double) -> double
pub fun sqrstd/num/double/sqr: (x : double) -> double(xx: double : doublestd/core/types/double: V ): doublestd/core/types/double: V
xx: double*std/core/(*).1: (double, double) -> doublexx: double
pub fun abs-maxstd/num/double/abs-max: (x : double, y : double) -> double( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
maxstd/core/max.1: (x : double, y : double) -> double(absstd/core/abs.1: (d : double) -> double(xx: double),absstd/core/abs.1: (d : double) -> double(yy: double))
pub fun abs-maxstd/num/double/abs-max.1: (xs : list<double>) -> double( xsxs: list<double> : liststd/core/list: V -> V<doublestd/core/types/double: V> ) : doublestd/core/types/double: V
xsxs: list<double>.foldlstd/core/foldl: forall<a,b,e> (list<a>, b, (b, a) -> e b) -> e b(0.0, fn(mm: double,xx: double) maxstd/core/max.1: (x : double, y : double) -> double(absstd/core/abs.1: (d : double) -> double(xx: double),mm: double) )
val rad2degstd/num/double/rad2deg: double : doublestd/core/types/double: V = 180.0/std/core/(/).1: (double, double) -> doublepistd/num/double/pi: double
val deg2radstd/num/double/deg2rad: double : doublestd/core/types/double: V = pistd/num/double/pi: double/std/core/(/).1: (double, double) -> double180.0
pub fun degstd/num/double/deg: (rad : double) -> double( radrad: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
radrad: double *std/core/(*).1: (double, double) -> double rad2degstd/num/double/rad2deg: double
pub fun radstd/num/double/rad: (deg : double) -> double( degdeg: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
degdeg: double *std/core/(*).1: (double, double) -> double deg2radstd/num/double/deg2rad: double
pub fun with-sign-ofstd/num/double/with-sign-of: (x : double, y : double) -> double( xx: double : doublestd/core/types/double: V, yy: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
if yy: double <std/core/(<).4: (double, double) -> bool 0.0 then ~std/core/(~).1: (d : double) -> double(xx: double.absstd/core/abs.1: (d : double) -> double) else xx: double.absstd/core/abs.1: (d : double) -> double
pub inline extern sinstd/num/double/sin: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "sin"
cs "Math.Sin"
js "Math.sin"
pub inline extern cosstd/num/double/cos: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "cos"
cs "Math.Cos"
js "Math.cos"
pub inline extern tanstd/num/double/tan: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "tan"
cs "Math.Tan"
js "Math.tan"
pub inline extern atanstd/num/double/atan: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "atan"
cs "Math.Atan"
js "Math.atan"
pub inline extern atan2std/num/double/atan2: (x : double, y : double) -> double( x : doublestd/core/types/double: V, y : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "atan2"
cs "Math.Atan2"
js "Math.atan2"
pub inline extern acosstd/num/double/acos: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "acos"
cs "Math.Acos"
js "Math.acos"
pub inline extern asinstd/num/double/asin: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "asin"
cs "Math.Asin"
js "Math.asin"
pub inline extern tanhstd/num/double/tanh: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "tanh"
cs "Math.Tanh"
js "Math.tanh"
pub inline extern coshstd/num/double/cosh: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "cosh"
cs "Math.Cosh"
js "Math.cosh"
pub inline extern sinhstd/num/double/sinh: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "sinh"
cs "Math.Sinh"
js "Math.sinh"
pub inline extern log1pstd/num/double/log1p: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "log1p"
js "Math.log1p"
pub inline extern expm1std/num/double/expm1: (d : double) -> double( d : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "log1p"
js "Math.log1p"
pub extern atanhstd/num/double/atanh: (d : double) -> double( dd: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "atanh"
js "Math.atanh"
pub extern acoshstd/num/double/acosh: (d : double) -> double( dd: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "acosh"
js "Math.acosh"
pub extern asinhstd/num/double/asinh: (d : double) -> double( dd: double : doublestd/core/types/double: V ) : doublestd/core/types/double: V
c "asinh"
js "Math.asinh"