@nberlette/math 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +889 -0
- package/cjs/abs.d.ts +14 -0
- package/cjs/abs.d.ts.map +1 -0
- package/cjs/abs.js +22 -0
- package/cjs/abs.js.map +1 -0
- package/cjs/acos.d.ts +17 -0
- package/cjs/acos.d.ts.map +1 -0
- package/cjs/acos.js +27 -0
- package/cjs/acos.js.map +1 -0
- package/cjs/acosh.d.ts +11 -0
- package/cjs/acosh.d.ts.map +1 -0
- package/cjs/acosh.js +35 -0
- package/cjs/acosh.js.map +1 -0
- package/cjs/asin.d.ts +11 -0
- package/cjs/asin.d.ts.map +1 -0
- package/cjs/asin.js +28 -0
- package/cjs/asin.js.map +1 -0
- package/cjs/asinh.d.ts +9 -0
- package/cjs/asinh.d.ts.map +1 -0
- package/cjs/asinh.js +26 -0
- package/cjs/asinh.js.map +1 -0
- package/cjs/atan.d.ts +11 -0
- package/cjs/atan.d.ts.map +1 -0
- package/cjs/atan.js +65 -0
- package/cjs/atan.js.map +1 -0
- package/cjs/atan2.d.ts +12 -0
- package/cjs/atan2.d.ts.map +1 -0
- package/cjs/atan2.js +70 -0
- package/cjs/atan2.js.map +1 -0
- package/cjs/atanh.d.ts +11 -0
- package/cjs/atanh.d.ts.map +1 -0
- package/cjs/atanh.js +32 -0
- package/cjs/atanh.js.map +1 -0
- package/cjs/cbrt.d.ts +9 -0
- package/cjs/cbrt.d.ts.map +1 -0
- package/cjs/cbrt.js +26 -0
- package/cjs/cbrt.js.map +1 -0
- package/cjs/ceil.d.ts +15 -0
- package/cjs/ceil.d.ts.map +1 -0
- package/cjs/ceil.js +34 -0
- package/cjs/ceil.js.map +1 -0
- package/cjs/clamp.d.ts +15 -0
- package/cjs/clamp.d.ts.map +1 -0
- package/cjs/clamp.js +32 -0
- package/cjs/clamp.js.map +1 -0
- package/cjs/clz32.d.ts +20 -0
- package/cjs/clz32.d.ts.map +1 -0
- package/cjs/clz32.js +48 -0
- package/cjs/clz32.js.map +1 -0
- package/cjs/constants/e.d.ts +17 -0
- package/cjs/constants/e.d.ts.map +1 -0
- package/cjs/constants/e.js +19 -0
- package/cjs/constants/e.js.map +1 -0
- package/cjs/constants/epsilon.d.ts +24 -0
- package/cjs/constants/epsilon.d.ts.map +1 -0
- package/cjs/constants/epsilon.js +26 -0
- package/cjs/constants/epsilon.js.map +1 -0
- package/cjs/constants/index.d.ts +23 -0
- package/cjs/constants/index.d.ts.map +1 -0
- package/cjs/constants/index.js +39 -0
- package/cjs/constants/index.js.map +1 -0
- package/cjs/constants/infinity.d.ts +3 -0
- package/cjs/constants/infinity.d.ts.map +1 -0
- package/cjs/constants/infinity.js +19 -0
- package/cjs/constants/infinity.js.map +1 -0
- package/cjs/constants/ln10.d.ts +10 -0
- package/cjs/constants/ln10.d.ts.map +1 -0
- package/cjs/constants/ln10.js +12 -0
- package/cjs/constants/ln10.js.map +1 -0
- package/cjs/constants/ln2.d.ts +10 -0
- package/cjs/constants/ln2.d.ts.map +1 -0
- package/cjs/constants/ln2.js +12 -0
- package/cjs/constants/ln2.js.map +1 -0
- package/cjs/constants/log10e.d.ts +10 -0
- package/cjs/constants/log10e.d.ts.map +1 -0
- package/cjs/constants/log10e.js +12 -0
- package/cjs/constants/log10e.js.map +1 -0
- package/cjs/constants/log2e.d.ts +10 -0
- package/cjs/constants/log2e.d.ts.map +1 -0
- package/cjs/constants/log2e.js +12 -0
- package/cjs/constants/log2e.js.map +1 -0
- package/cjs/constants/max_safe_integer.d.ts +11 -0
- package/cjs/constants/max_safe_integer.d.ts.map +1 -0
- package/cjs/constants/max_safe_integer.js +13 -0
- package/cjs/constants/max_safe_integer.js.map +1 -0
- package/cjs/constants/max_value.d.ts +10 -0
- package/cjs/constants/max_value.d.ts.map +1 -0
- package/cjs/constants/max_value.js +12 -0
- package/cjs/constants/max_value.js.map +1 -0
- package/cjs/constants/min_safe_integer.d.ts +12 -0
- package/cjs/constants/min_safe_integer.d.ts.map +1 -0
- package/cjs/constants/min_safe_integer.js +14 -0
- package/cjs/constants/min_safe_integer.js.map +1 -0
- package/cjs/constants/min_value.d.ts +10 -0
- package/cjs/constants/min_value.d.ts.map +1 -0
- package/cjs/constants/min_value.js +12 -0
- package/cjs/constants/min_value.js.map +1 -0
- package/cjs/constants/nan.d.ts +47 -0
- package/cjs/constants/nan.d.ts.map +1 -0
- package/cjs/constants/nan.js +30 -0
- package/cjs/constants/nan.js.map +1 -0
- package/cjs/constants/negative_infinity.d.ts +28 -0
- package/cjs/constants/negative_infinity.d.ts.map +1 -0
- package/cjs/constants/negative_infinity.js +15 -0
- package/cjs/constants/negative_infinity.js.map +1 -0
- package/cjs/constants/negative_zero.d.ts +31 -0
- package/cjs/constants/negative_zero.d.ts.map +1 -0
- package/cjs/constants/negative_zero.js +21 -0
- package/cjs/constants/negative_zero.js.map +1 -0
- package/cjs/constants/pi.d.ts +10 -0
- package/cjs/constants/pi.d.ts.map +1 -0
- package/cjs/constants/pi.js +12 -0
- package/cjs/constants/pi.js.map +1 -0
- package/cjs/constants/positive_infinity.d.ts +29 -0
- package/cjs/constants/positive_infinity.d.ts.map +1 -0
- package/cjs/constants/positive_infinity.js +16 -0
- package/cjs/constants/positive_infinity.js.map +1 -0
- package/cjs/constants/positive_zero.d.ts +38 -0
- package/cjs/constants/positive_zero.d.ts.map +1 -0
- package/cjs/constants/positive_zero.js +36 -0
- package/cjs/constants/positive_zero.js.map +1 -0
- package/cjs/constants/sqrt1_2.d.ts +9 -0
- package/cjs/constants/sqrt1_2.d.ts.map +1 -0
- package/cjs/constants/sqrt1_2.js +11 -0
- package/cjs/constants/sqrt1_2.js.map +1 -0
- package/cjs/constants/sqrt2.d.ts +9 -0
- package/cjs/constants/sqrt2.d.ts.map +1 -0
- package/cjs/constants/sqrt2.js +11 -0
- package/cjs/constants/sqrt2.js.map +1 -0
- package/cjs/cos.d.ts +10 -0
- package/cjs/cos.d.ts.map +1 -0
- package/cjs/cos.js +32 -0
- package/cjs/cos.js.map +1 -0
- package/cjs/cosh.d.ts +10 -0
- package/cjs/cosh.d.ts.map +1 -0
- package/cjs/cosh.js +21 -0
- package/cjs/cosh.js.map +1 -0
- package/cjs/exp.d.ts +20 -0
- package/cjs/exp.d.ts.map +1 -0
- package/cjs/exp.js +48 -0
- package/cjs/exp.js.map +1 -0
- package/cjs/expm1.d.ts +11 -0
- package/cjs/expm1.d.ts.map +1 -0
- package/cjs/expm1.js +38 -0
- package/cjs/expm1.js.map +1 -0
- package/cjs/f16round.d.ts +24 -0
- package/cjs/f16round.d.ts.map +1 -0
- package/cjs/f16round.js +42 -0
- package/cjs/f16round.js.map +1 -0
- package/cjs/float16/constants.d.ts +97 -0
- package/cjs/float16/constants.d.ts.map +1 -0
- package/cjs/float16/constants.js +99 -0
- package/cjs/float16/constants.js.map +1 -0
- package/cjs/float16/decode.d.ts +40 -0
- package/cjs/float16/decode.d.ts.map +1 -0
- package/cjs/float16/decode.js +67 -0
- package/cjs/float16/decode.js.map +1 -0
- package/cjs/float16/encode.d.ts +67 -0
- package/cjs/float16/encode.d.ts.map +1 -0
- package/cjs/float16/encode.js +77 -0
- package/cjs/float16/encode.js.map +1 -0
- package/cjs/float16/guards.d.ts +22 -0
- package/cjs/float16/guards.d.ts.map +1 -0
- package/cjs/float16/guards.js +15 -0
- package/cjs/float16/guards.js.map +1 -0
- package/cjs/float16/index.d.ts +11 -0
- package/cjs/float16/index.d.ts.map +1 -0
- package/cjs/float16/index.js +27 -0
- package/cjs/float16/index.js.map +1 -0
- package/cjs/float16/round.d.ts +25 -0
- package/cjs/float16/round.d.ts.map +1 -0
- package/cjs/float16/round.js +46 -0
- package/cjs/float16/round.js.map +1 -0
- package/cjs/float32/constants.d.ts +96 -0
- package/cjs/float32/constants.d.ts.map +1 -0
- package/cjs/float32/constants.js +98 -0
- package/cjs/float32/constants.js.map +1 -0
- package/cjs/float32/decode.d.ts +38 -0
- package/cjs/float32/decode.d.ts.map +1 -0
- package/cjs/float32/decode.js +70 -0
- package/cjs/float32/decode.js.map +1 -0
- package/cjs/float32/encode.d.ts +50 -0
- package/cjs/float32/encode.d.ts.map +1 -0
- package/cjs/float32/encode.js +77 -0
- package/cjs/float32/encode.js.map +1 -0
- package/cjs/float32/guards.d.ts +37 -0
- package/cjs/float32/guards.d.ts.map +1 -0
- package/cjs/float32/guards.js +20 -0
- package/cjs/float32/guards.js.map +1 -0
- package/cjs/float32/index.d.ts +11 -0
- package/cjs/float32/index.d.ts.map +1 -0
- package/cjs/float32/index.js +27 -0
- package/cjs/float32/index.js.map +1 -0
- package/cjs/float32/round.d.ts +23 -0
- package/cjs/float32/round.d.ts.map +1 -0
- package/cjs/float32/round.js +36 -0
- package/cjs/float32/round.js.map +1 -0
- package/cjs/floor.d.ts +10 -0
- package/cjs/floor.d.ts.map +1 -0
- package/cjs/floor.js +32 -0
- package/cjs/floor.js.map +1 -0
- package/cjs/fround.d.ts +23 -0
- package/cjs/fround.d.ts.map +1 -0
- package/cjs/fround.js +35 -0
- package/cjs/fround.js.map +1 -0
- package/cjs/guards/finite.d.ts +23 -0
- package/cjs/guards/finite.d.ts.map +1 -0
- package/cjs/guards/finite.js +21 -0
- package/cjs/guards/finite.js.map +1 -0
- package/cjs/guards/index.d.ts +50 -0
- package/cjs/guards/index.d.ts.map +1 -0
- package/cjs/guards/index.js +66 -0
- package/cjs/guards/index.js.map +1 -0
- package/cjs/guards/infinity.d.ts +3 -0
- package/cjs/guards/infinity.d.ts.map +1 -0
- package/cjs/guards/infinity.js +19 -0
- package/cjs/guards/infinity.js.map +1 -0
- package/cjs/guards/integer.d.ts +47 -0
- package/cjs/guards/integer.d.ts.map +1 -0
- package/cjs/guards/integer.js +23 -0
- package/cjs/guards/integer.js.map +1 -0
- package/cjs/guards/nan.d.ts +61 -0
- package/cjs/guards/nan.d.ts.map +1 -0
- package/cjs/guards/nan.js +68 -0
- package/cjs/guards/nan.js.map +1 -0
- package/cjs/guards/negative_infinity.d.ts +19 -0
- package/cjs/guards/negative_infinity.d.ts.map +1 -0
- package/cjs/guards/negative_infinity.js +25 -0
- package/cjs/guards/negative_infinity.js.map +1 -0
- package/cjs/guards/negative_zero.d.ts +12 -0
- package/cjs/guards/negative_zero.d.ts.map +1 -0
- package/cjs/guards/negative_zero.js +24 -0
- package/cjs/guards/negative_zero.js.map +1 -0
- package/cjs/guards/positive_infinity.d.ts +19 -0
- package/cjs/guards/positive_infinity.d.ts.map +1 -0
- package/cjs/guards/positive_infinity.js +25 -0
- package/cjs/guards/positive_infinity.js.map +1 -0
- package/cjs/guards/positive_zero.d.ts +17 -0
- package/cjs/guards/positive_zero.d.ts.map +1 -0
- package/cjs/guards/positive_zero.js +36 -0
- package/cjs/guards/positive_zero.js.map +1 -0
- package/cjs/guards/safe_integer.d.ts +33 -0
- package/cjs/guards/safe_integer.d.ts.map +1 -0
- package/cjs/guards/safe_integer.js +27 -0
- package/cjs/guards/safe_integer.js.map +1 -0
- package/cjs/hypot.d.ts +18 -0
- package/cjs/hypot.d.ts.map +1 -0
- package/cjs/hypot.js +63 -0
- package/cjs/hypot.js.map +1 -0
- package/cjs/ieee754.d.ts +16 -0
- package/cjs/ieee754.d.ts.map +1 -0
- package/cjs/ieee754.js +32 -0
- package/cjs/ieee754.js.map +1 -0
- package/cjs/imul.d.ts +17 -0
- package/cjs/imul.d.ts.map +1 -0
- package/cjs/imul.js +24 -0
- package/cjs/imul.js.map +1 -0
- package/cjs/index.d.ts +84 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +113 -0
- package/cjs/index.js.map +1 -0
- package/cjs/internal/ieee754.d.ts +174 -0
- package/cjs/internal/ieee754.d.ts.map +1 -0
- package/cjs/internal/ieee754.js +200 -0
- package/cjs/internal/ieee754.js.map +1 -0
- package/cjs/internal/primordials.d.ts +30 -0
- package/cjs/internal/primordials.d.ts.map +1 -0
- package/cjs/internal/primordials.js +30 -0
- package/cjs/internal/primordials.js.map +1 -0
- package/cjs/log.d.ts +9 -0
- package/cjs/log.d.ts.map +1 -0
- package/cjs/log.js +46 -0
- package/cjs/log.js.map +1 -0
- package/cjs/log10.d.ts +9 -0
- package/cjs/log10.d.ts.map +1 -0
- package/cjs/log10.js +21 -0
- package/cjs/log10.js.map +1 -0
- package/cjs/log1p.d.ts +10 -0
- package/cjs/log1p.d.ts.map +1 -0
- package/cjs/log1p.js +32 -0
- package/cjs/log1p.js.map +1 -0
- package/cjs/log2.d.ts +12 -0
- package/cjs/log2.d.ts.map +1 -0
- package/cjs/log2.js +24 -0
- package/cjs/log2.js.map +1 -0
- package/cjs/max.d.ts +22 -0
- package/cjs/max.d.ts.map +1 -0
- package/cjs/max.js +51 -0
- package/cjs/max.js.map +1 -0
- package/cjs/min.d.ts +10 -0
- package/cjs/min.d.ts.map +1 -0
- package/cjs/min.js +36 -0
- package/cjs/min.js.map +1 -0
- package/cjs/package.json +3 -0
- package/cjs/pow.d.ts +31 -0
- package/cjs/pow.d.ts.map +1 -0
- package/cjs/pow.js +36 -0
- package/cjs/pow.js.map +1 -0
- package/cjs/random.d.ts +93 -0
- package/cjs/random.d.ts.map +1 -0
- package/cjs/random.js +242 -0
- package/cjs/random.js.map +1 -0
- package/cjs/round.d.ts +9 -0
- package/cjs/round.d.ts.map +1 -0
- package/cjs/round.js +24 -0
- package/cjs/round.js.map +1 -0
- package/cjs/sign.d.ts +17 -0
- package/cjs/sign.d.ts.map +1 -0
- package/cjs/sign.js +22 -0
- package/cjs/sign.js.map +1 -0
- package/cjs/sin.d.ts +14 -0
- package/cjs/sin.d.ts.map +1 -0
- package/cjs/sin.js +31 -0
- package/cjs/sin.js.map +1 -0
- package/cjs/sinh.d.ts +14 -0
- package/cjs/sinh.d.ts.map +1 -0
- package/cjs/sinh.js +22 -0
- package/cjs/sinh.js.map +1 -0
- package/cjs/sqrt.d.ts +19 -0
- package/cjs/sqrt.d.ts.map +1 -0
- package/cjs/sqrt.js +45 -0
- package/cjs/sqrt.js.map +1 -0
- package/cjs/tan.d.ts +9 -0
- package/cjs/tan.d.ts.map +1 -0
- package/cjs/tan.js +26 -0
- package/cjs/tan.js.map +1 -0
- package/cjs/tanh.d.ts +17 -0
- package/cjs/tanh.d.ts.map +1 -0
- package/cjs/tanh.js +34 -0
- package/cjs/tanh.js.map +1 -0
- package/cjs/trunc.d.ts +21 -0
- package/cjs/trunc.d.ts.map +1 -0
- package/cjs/trunc.js +50 -0
- package/cjs/trunc.js.map +1 -0
- package/cjs/types/finite.d.ts +16 -0
- package/cjs/types/finite.d.ts.map +1 -0
- package/cjs/types/finite.js +4 -0
- package/cjs/types/finite.js.map +1 -0
- package/cjs/types/float.d.ts +65 -0
- package/cjs/types/float.d.ts.map +1 -0
- package/cjs/types/float.js +4 -0
- package/cjs/types/float.js.map +1 -0
- package/cjs/types/index.d.ts +6 -0
- package/cjs/types/index.d.ts.map +1 -0
- package/cjs/types/index.js +22 -0
- package/cjs/types/index.js.map +1 -0
- package/cjs/types/integer.d.ts +147 -0
- package/cjs/types/integer.d.ts.map +1 -0
- package/cjs/types/integer.js +5 -0
- package/cjs/types/integer.js.map +1 -0
- package/cjs/types/precision.d.ts +46 -0
- package/cjs/types/precision.d.ts.map +1 -0
- package/cjs/types/precision.js +9 -0
- package/cjs/types/precision.js.map +1 -0
- package/cjs/types/safe_integer.d.ts +17 -0
- package/cjs/types/safe_integer.d.ts.map +1 -0
- package/cjs/types/safe_integer.js +5 -0
- package/cjs/types/safe_integer.js.map +1 -0
- package/esm/abs.d.ts +14 -0
- package/esm/abs.d.ts.map +1 -0
- package/esm/abs.js +19 -0
- package/esm/abs.js.map +1 -0
- package/esm/acos.d.ts +17 -0
- package/esm/acos.d.ts.map +1 -0
- package/esm/acos.js +24 -0
- package/esm/acos.js.map +1 -0
- package/esm/acosh.d.ts +11 -0
- package/esm/acosh.d.ts.map +1 -0
- package/esm/acosh.js +32 -0
- package/esm/acosh.js.map +1 -0
- package/esm/asin.d.ts +11 -0
- package/esm/asin.d.ts.map +1 -0
- package/esm/asin.js +25 -0
- package/esm/asin.js.map +1 -0
- package/esm/asinh.d.ts +9 -0
- package/esm/asinh.d.ts.map +1 -0
- package/esm/asinh.js +23 -0
- package/esm/asinh.js.map +1 -0
- package/esm/atan.d.ts +11 -0
- package/esm/atan.d.ts.map +1 -0
- package/esm/atan.js +62 -0
- package/esm/atan.js.map +1 -0
- package/esm/atan2.d.ts +12 -0
- package/esm/atan2.d.ts.map +1 -0
- package/esm/atan2.js +67 -0
- package/esm/atan2.js.map +1 -0
- package/esm/atanh.d.ts +11 -0
- package/esm/atanh.d.ts.map +1 -0
- package/esm/atanh.js +29 -0
- package/esm/atanh.js.map +1 -0
- package/esm/cbrt.d.ts +9 -0
- package/esm/cbrt.d.ts.map +1 -0
- package/esm/cbrt.js +23 -0
- package/esm/cbrt.js.map +1 -0
- package/esm/ceil.d.ts +15 -0
- package/esm/ceil.d.ts.map +1 -0
- package/esm/ceil.js +31 -0
- package/esm/ceil.js.map +1 -0
- package/esm/clamp.d.ts +15 -0
- package/esm/clamp.d.ts.map +1 -0
- package/esm/clamp.js +29 -0
- package/esm/clamp.js.map +1 -0
- package/esm/clz32.d.ts +20 -0
- package/esm/clz32.d.ts.map +1 -0
- package/esm/clz32.js +45 -0
- package/esm/clz32.js.map +1 -0
- package/esm/constants/e.d.ts +17 -0
- package/esm/constants/e.d.ts.map +1 -0
- package/esm/constants/e.js +16 -0
- package/esm/constants/e.js.map +1 -0
- package/esm/constants/epsilon.d.ts +24 -0
- package/esm/constants/epsilon.d.ts.map +1 -0
- package/esm/constants/epsilon.js +23 -0
- package/esm/constants/epsilon.js.map +1 -0
- package/esm/constants/index.d.ts +23 -0
- package/esm/constants/index.d.ts.map +1 -0
- package/esm/constants/index.js +23 -0
- package/esm/constants/index.js.map +1 -0
- package/esm/constants/infinity.d.ts +3 -0
- package/esm/constants/infinity.d.ts.map +1 -0
- package/esm/constants/infinity.js +3 -0
- package/esm/constants/infinity.js.map +1 -0
- package/esm/constants/ln10.d.ts +10 -0
- package/esm/constants/ln10.d.ts.map +1 -0
- package/esm/constants/ln10.js +9 -0
- package/esm/constants/ln10.js.map +1 -0
- package/esm/constants/ln2.d.ts +10 -0
- package/esm/constants/ln2.d.ts.map +1 -0
- package/esm/constants/ln2.js +9 -0
- package/esm/constants/ln2.js.map +1 -0
- package/esm/constants/log10e.d.ts +10 -0
- package/esm/constants/log10e.d.ts.map +1 -0
- package/esm/constants/log10e.js +9 -0
- package/esm/constants/log10e.js.map +1 -0
- package/esm/constants/log2e.d.ts +10 -0
- package/esm/constants/log2e.d.ts.map +1 -0
- package/esm/constants/log2e.js +9 -0
- package/esm/constants/log2e.js.map +1 -0
- package/esm/constants/max_safe_integer.d.ts +11 -0
- package/esm/constants/max_safe_integer.d.ts.map +1 -0
- package/esm/constants/max_safe_integer.js +10 -0
- package/esm/constants/max_safe_integer.js.map +1 -0
- package/esm/constants/max_value.d.ts +10 -0
- package/esm/constants/max_value.d.ts.map +1 -0
- package/esm/constants/max_value.js +9 -0
- package/esm/constants/max_value.js.map +1 -0
- package/esm/constants/min_safe_integer.d.ts +12 -0
- package/esm/constants/min_safe_integer.d.ts.map +1 -0
- package/esm/constants/min_safe_integer.js +11 -0
- package/esm/constants/min_safe_integer.js.map +1 -0
- package/esm/constants/min_value.d.ts +10 -0
- package/esm/constants/min_value.d.ts.map +1 -0
- package/esm/constants/min_value.js +9 -0
- package/esm/constants/min_value.js.map +1 -0
- package/esm/constants/nan.d.ts +47 -0
- package/esm/constants/nan.d.ts.map +1 -0
- package/esm/constants/nan.js +27 -0
- package/esm/constants/nan.js.map +1 -0
- package/esm/constants/negative_infinity.d.ts +28 -0
- package/esm/constants/negative_infinity.d.ts.map +1 -0
- package/esm/constants/negative_infinity.js +12 -0
- package/esm/constants/negative_infinity.js.map +1 -0
- package/esm/constants/negative_zero.d.ts +31 -0
- package/esm/constants/negative_zero.d.ts.map +1 -0
- package/esm/constants/negative_zero.js +18 -0
- package/esm/constants/negative_zero.js.map +1 -0
- package/esm/constants/pi.d.ts +10 -0
- package/esm/constants/pi.d.ts.map +1 -0
- package/esm/constants/pi.js +9 -0
- package/esm/constants/pi.js.map +1 -0
- package/esm/constants/positive_infinity.d.ts +29 -0
- package/esm/constants/positive_infinity.d.ts.map +1 -0
- package/esm/constants/positive_infinity.js +13 -0
- package/esm/constants/positive_infinity.js.map +1 -0
- package/esm/constants/positive_zero.d.ts +38 -0
- package/esm/constants/positive_zero.d.ts.map +1 -0
- package/esm/constants/positive_zero.js +33 -0
- package/esm/constants/positive_zero.js.map +1 -0
- package/esm/constants/sqrt1_2.d.ts +9 -0
- package/esm/constants/sqrt1_2.d.ts.map +1 -0
- package/esm/constants/sqrt1_2.js +8 -0
- package/esm/constants/sqrt1_2.js.map +1 -0
- package/esm/constants/sqrt2.d.ts +9 -0
- package/esm/constants/sqrt2.d.ts.map +1 -0
- package/esm/constants/sqrt2.js +8 -0
- package/esm/constants/sqrt2.js.map +1 -0
- package/esm/cos.d.ts +10 -0
- package/esm/cos.d.ts.map +1 -0
- package/esm/cos.js +29 -0
- package/esm/cos.js.map +1 -0
- package/esm/cosh.d.ts +10 -0
- package/esm/cosh.d.ts.map +1 -0
- package/esm/cosh.js +18 -0
- package/esm/cosh.js.map +1 -0
- package/esm/exp.d.ts +20 -0
- package/esm/exp.d.ts.map +1 -0
- package/esm/exp.js +45 -0
- package/esm/exp.js.map +1 -0
- package/esm/expm1.d.ts +11 -0
- package/esm/expm1.d.ts.map +1 -0
- package/esm/expm1.js +35 -0
- package/esm/expm1.js.map +1 -0
- package/esm/f16round.d.ts +24 -0
- package/esm/f16round.d.ts.map +1 -0
- package/esm/f16round.js +39 -0
- package/esm/f16round.js.map +1 -0
- package/esm/float16/constants.d.ts +97 -0
- package/esm/float16/constants.d.ts.map +1 -0
- package/esm/float16/constants.js +96 -0
- package/esm/float16/constants.js.map +1 -0
- package/esm/float16/decode.d.ts +40 -0
- package/esm/float16/decode.d.ts.map +1 -0
- package/esm/float16/decode.js +61 -0
- package/esm/float16/decode.js.map +1 -0
- package/esm/float16/encode.d.ts +67 -0
- package/esm/float16/encode.d.ts.map +1 -0
- package/esm/float16/encode.js +71 -0
- package/esm/float16/encode.js.map +1 -0
- package/esm/float16/guards.d.ts +22 -0
- package/esm/float16/guards.d.ts.map +1 -0
- package/esm/float16/guards.js +12 -0
- package/esm/float16/guards.js.map +1 -0
- package/esm/float16/index.d.ts +11 -0
- package/esm/float16/index.d.ts.map +1 -0
- package/esm/float16/index.js +11 -0
- package/esm/float16/index.js.map +1 -0
- package/esm/float16/round.d.ts +25 -0
- package/esm/float16/round.d.ts.map +1 -0
- package/esm/float16/round.js +43 -0
- package/esm/float16/round.js.map +1 -0
- package/esm/float32/constants.d.ts +96 -0
- package/esm/float32/constants.d.ts.map +1 -0
- package/esm/float32/constants.js +95 -0
- package/esm/float32/constants.js.map +1 -0
- package/esm/float32/decode.d.ts +38 -0
- package/esm/float32/decode.d.ts.map +1 -0
- package/esm/float32/decode.js +64 -0
- package/esm/float32/decode.js.map +1 -0
- package/esm/float32/encode.d.ts +50 -0
- package/esm/float32/encode.d.ts.map +1 -0
- package/esm/float32/encode.js +71 -0
- package/esm/float32/encode.js.map +1 -0
- package/esm/float32/guards.d.ts +37 -0
- package/esm/float32/guards.d.ts.map +1 -0
- package/esm/float32/guards.js +16 -0
- package/esm/float32/guards.js.map +1 -0
- package/esm/float32/index.d.ts +11 -0
- package/esm/float32/index.d.ts.map +1 -0
- package/esm/float32/index.js +11 -0
- package/esm/float32/index.js.map +1 -0
- package/esm/float32/round.d.ts +23 -0
- package/esm/float32/round.d.ts.map +1 -0
- package/esm/float32/round.js +33 -0
- package/esm/float32/round.js.map +1 -0
- package/esm/floor.d.ts +10 -0
- package/esm/floor.d.ts.map +1 -0
- package/esm/floor.js +29 -0
- package/esm/floor.js.map +1 -0
- package/esm/fround.d.ts +23 -0
- package/esm/fround.d.ts.map +1 -0
- package/esm/fround.js +32 -0
- package/esm/fround.js.map +1 -0
- package/esm/guards/finite.d.ts +23 -0
- package/esm/guards/finite.d.ts.map +1 -0
- package/esm/guards/finite.js +18 -0
- package/esm/guards/finite.js.map +1 -0
- package/esm/guards/index.d.ts +50 -0
- package/esm/guards/index.d.ts.map +1 -0
- package/esm/guards/index.js +50 -0
- package/esm/guards/index.js.map +1 -0
- package/esm/guards/infinity.d.ts +3 -0
- package/esm/guards/infinity.d.ts.map +1 -0
- package/esm/guards/infinity.js +3 -0
- package/esm/guards/infinity.js.map +1 -0
- package/esm/guards/integer.d.ts +47 -0
- package/esm/guards/integer.d.ts.map +1 -0
- package/esm/guards/integer.js +19 -0
- package/esm/guards/integer.js.map +1 -0
- package/esm/guards/nan.d.ts +61 -0
- package/esm/guards/nan.d.ts.map +1 -0
- package/esm/guards/nan.js +63 -0
- package/esm/guards/nan.js.map +1 -0
- package/esm/guards/negative_infinity.d.ts +19 -0
- package/esm/guards/negative_infinity.d.ts.map +1 -0
- package/esm/guards/negative_infinity.js +21 -0
- package/esm/guards/negative_infinity.js.map +1 -0
- package/esm/guards/negative_zero.d.ts +12 -0
- package/esm/guards/negative_zero.d.ts.map +1 -0
- package/esm/guards/negative_zero.js +20 -0
- package/esm/guards/negative_zero.js.map +1 -0
- package/esm/guards/positive_infinity.d.ts +19 -0
- package/esm/guards/positive_infinity.d.ts.map +1 -0
- package/esm/guards/positive_infinity.js +21 -0
- package/esm/guards/positive_infinity.js.map +1 -0
- package/esm/guards/positive_zero.d.ts +17 -0
- package/esm/guards/positive_zero.d.ts.map +1 -0
- package/esm/guards/positive_zero.js +19 -0
- package/esm/guards/positive_zero.js.map +1 -0
- package/esm/guards/safe_integer.d.ts +33 -0
- package/esm/guards/safe_integer.d.ts.map +1 -0
- package/esm/guards/safe_integer.js +22 -0
- package/esm/guards/safe_integer.js.map +1 -0
- package/esm/hypot.d.ts +18 -0
- package/esm/hypot.d.ts.map +1 -0
- package/esm/hypot.js +60 -0
- package/esm/hypot.js.map +1 -0
- package/esm/ieee754.d.ts +16 -0
- package/esm/ieee754.d.ts.map +1 -0
- package/esm/ieee754.js +16 -0
- package/esm/ieee754.js.map +1 -0
- package/esm/imul.d.ts +17 -0
- package/esm/imul.d.ts.map +1 -0
- package/esm/imul.js +21 -0
- package/esm/imul.js.map +1 -0
- package/esm/index.d.ts +84 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +84 -0
- package/esm/index.js.map +1 -0
- package/esm/internal/ieee754.d.ts +174 -0
- package/esm/internal/ieee754.d.ts.map +1 -0
- package/esm/internal/ieee754.js +194 -0
- package/esm/internal/ieee754.js.map +1 -0
- package/esm/internal/primordials.d.ts +30 -0
- package/esm/internal/primordials.d.ts.map +1 -0
- package/esm/internal/primordials.js +27 -0
- package/esm/internal/primordials.js.map +1 -0
- package/esm/log.d.ts +9 -0
- package/esm/log.d.ts.map +1 -0
- package/esm/log.js +43 -0
- package/esm/log.js.map +1 -0
- package/esm/log10.d.ts +9 -0
- package/esm/log10.d.ts.map +1 -0
- package/esm/log10.js +18 -0
- package/esm/log10.js.map +1 -0
- package/esm/log1p.d.ts +10 -0
- package/esm/log1p.d.ts.map +1 -0
- package/esm/log1p.js +29 -0
- package/esm/log1p.js.map +1 -0
- package/esm/log2.d.ts +12 -0
- package/esm/log2.d.ts.map +1 -0
- package/esm/log2.js +21 -0
- package/esm/log2.js.map +1 -0
- package/esm/max.d.ts +22 -0
- package/esm/max.d.ts.map +1 -0
- package/esm/max.js +48 -0
- package/esm/max.js.map +1 -0
- package/esm/min.d.ts +10 -0
- package/esm/min.d.ts.map +1 -0
- package/esm/min.js +33 -0
- package/esm/min.js.map +1 -0
- package/esm/package.json +3 -0
- package/esm/pow.d.ts +31 -0
- package/esm/pow.d.ts.map +1 -0
- package/esm/pow.js +33 -0
- package/esm/pow.js.map +1 -0
- package/esm/random.d.ts +93 -0
- package/esm/random.d.ts.map +1 -0
- package/esm/random.js +237 -0
- package/esm/random.js.map +1 -0
- package/esm/round.d.ts +9 -0
- package/esm/round.d.ts.map +1 -0
- package/esm/round.js +21 -0
- package/esm/round.js.map +1 -0
- package/esm/sign.d.ts +17 -0
- package/esm/sign.d.ts.map +1 -0
- package/esm/sign.js +19 -0
- package/esm/sign.js.map +1 -0
- package/esm/sin.d.ts +14 -0
- package/esm/sin.d.ts.map +1 -0
- package/esm/sin.js +28 -0
- package/esm/sin.js.map +1 -0
- package/esm/sinh.d.ts +14 -0
- package/esm/sinh.d.ts.map +1 -0
- package/esm/sinh.js +19 -0
- package/esm/sinh.js.map +1 -0
- package/esm/sqrt.d.ts +19 -0
- package/esm/sqrt.d.ts.map +1 -0
- package/esm/sqrt.js +42 -0
- package/esm/sqrt.js.map +1 -0
- package/esm/tan.d.ts +9 -0
- package/esm/tan.d.ts.map +1 -0
- package/esm/tan.js +23 -0
- package/esm/tan.js.map +1 -0
- package/esm/tanh.d.ts +17 -0
- package/esm/tanh.d.ts.map +1 -0
- package/esm/tanh.js +31 -0
- package/esm/tanh.js.map +1 -0
- package/esm/trunc.d.ts +21 -0
- package/esm/trunc.d.ts.map +1 -0
- package/esm/trunc.js +47 -0
- package/esm/trunc.js.map +1 -0
- package/esm/types/finite.d.ts +16 -0
- package/esm/types/finite.d.ts.map +1 -0
- package/esm/types/finite.js +3 -0
- package/esm/types/finite.js.map +1 -0
- package/esm/types/float.d.ts +65 -0
- package/esm/types/float.d.ts.map +1 -0
- package/esm/types/float.js +3 -0
- package/esm/types/float.js.map +1 -0
- package/esm/types/index.d.ts +6 -0
- package/esm/types/index.d.ts.map +1 -0
- package/esm/types/index.js +6 -0
- package/esm/types/index.js.map +1 -0
- package/esm/types/integer.d.ts +147 -0
- package/esm/types/integer.d.ts.map +1 -0
- package/esm/types/integer.js +4 -0
- package/esm/types/integer.js.map +1 -0
- package/esm/types/precision.d.ts +46 -0
- package/esm/types/precision.d.ts.map +1 -0
- package/esm/types/precision.js +8 -0
- package/esm/types/precision.js.map +1 -0
- package/esm/types/safe_integer.d.ts +17 -0
- package/esm/types/safe_integer.d.ts.map +1 -0
- package/esm/types/safe_integer.js +4 -0
- package/esm/types/safe_integer.js.map +1 -0
- package/package.json +1834 -0
- package/src/abs.ts +18 -0
- package/src/acos.ts +24 -0
- package/src/acosh.ts +28 -0
- package/src/asin.ts +24 -0
- package/src/asinh.ts +21 -0
- package/src/atan.ts +64 -0
- package/src/atan2.ts +58 -0
- package/src/atanh.ts +26 -0
- package/src/cbrt.ts +22 -0
- package/src/ceil.ts +27 -0
- package/src/clamp.ts +29 -0
- package/src/clz32.ts +45 -0
- package/src/constants/e.ts +18 -0
- package/src/constants/epsilon.ts +25 -0
- package/src/constants/index.ts +22 -0
- package/src/constants/infinity.ts +2 -0
- package/src/constants/ln10.ts +9 -0
- package/src/constants/ln2.ts +9 -0
- package/src/constants/log10e.ts +9 -0
- package/src/constants/log2e.ts +9 -0
- package/src/constants/max_safe_integer.ts +10 -0
- package/src/constants/max_value.ts +9 -0
- package/src/constants/min_safe_integer.ts +11 -0
- package/src/constants/min_value.ts +9 -0
- package/src/constants/nan.ts +57 -0
- package/src/constants/negative_infinity.ts +28 -0
- package/src/constants/negative_zero.ts +34 -0
- package/src/constants/pi.ts +9 -0
- package/src/constants/positive_infinity.ts +30 -0
- package/src/constants/positive_zero.ts +41 -0
- package/src/constants/sqrt1_2.ts +8 -0
- package/src/constants/sqrt2.ts +8 -0
- package/src/cos.ts +29 -0
- package/src/cosh.ts +18 -0
- package/src/exp.ts +45 -0
- package/src/expm1.ts +31 -0
- package/src/f16round.ts +39 -0
- package/src/float16/constants.ts +106 -0
- package/src/float16/decode.ts +61 -0
- package/src/float16/encode.ts +72 -0
- package/src/float16/guards.ts +33 -0
- package/src/float16/index.ts +10 -0
- package/src/float16/round.ts +43 -0
- package/src/float32/constants.ts +105 -0
- package/src/float32/decode.ts +64 -0
- package/src/float32/encode.ts +71 -0
- package/src/float32/guards.ts +54 -0
- package/src/float32/index.ts +10 -0
- package/src/float32/round.ts +33 -0
- package/src/floor.ts +26 -0
- package/src/fround.ts +32 -0
- package/src/guards/finite.ts +45 -0
- package/src/guards/index.ts +49 -0
- package/src/guards/infinity.ts +2 -0
- package/src/guards/integer.ts +62 -0
- package/src/guards/nan.ts +65 -0
- package/src/guards/negative_infinity.ts +22 -0
- package/src/guards/negative_zero.ts +21 -0
- package/src/guards/positive_infinity.ts +22 -0
- package/src/guards/positive_zero.ts +19 -0
- package/src/guards/safe_integer.ts +56 -0
- package/src/hypot.ts +59 -0
- package/src/ieee754.ts +15 -0
- package/src/imul.ts +21 -0
- package/src/index.ts +84 -0
- package/src/internal/ieee754.ts +255 -0
- package/src/internal/primordials.ts +33 -0
- package/src/log.ts +42 -0
- package/src/log10.ts +18 -0
- package/src/log1p.ts +26 -0
- package/src/log2.ts +21 -0
- package/src/max.ts +46 -0
- package/src/min.ts +32 -0
- package/src/pow.ts +33 -0
- package/src/random.ts +241 -0
- package/src/round.ts +20 -0
- package/src/sign.ts +19 -0
- package/src/sin.ts +29 -0
- package/src/sinh.ts +19 -0
- package/src/sqrt.ts +40 -0
- package/src/tan.ts +22 -0
- package/src/tanh.ts +28 -0
- package/src/trunc.ts +44 -0
- package/src/types/finite.ts +23 -0
- package/src/types/float.ts +74 -0
- package/src/types/index.ts +5 -0
- package/src/types/integer.ts +167 -0
- package/src/types/precision.ts +51 -0
- package/src/types/safe_integer.ts +18 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if the provided number is `+Infinity` (positive infinity), in a way
|
|
3
|
+
* that is immune to any global variable shadowing or reassignment.
|
|
4
|
+
*
|
|
5
|
+
* @module positive-infinity
|
|
6
|
+
*/
|
|
7
|
+
import { POSITIVE_INFINITY } from "../constants/positive_infinity.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Checks if the provided number is `+Infinity` (positive infinity), in a way
|
|
11
|
+
* that is immune to any global variable shadowing or reassignment.
|
|
12
|
+
*
|
|
13
|
+
* @param it The number to check for positive infinity.
|
|
14
|
+
* @returns `true` if the provided number is `+Infinity`, otherwise `false`.
|
|
15
|
+
* @category Guards
|
|
16
|
+
* @tags Positive Infinity
|
|
17
|
+
*/
|
|
18
|
+
export function isPositiveInfinity(it: number): it is POSITIVE_INFINITY {
|
|
19
|
+
return +it === POSITIVE_INFINITY;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { POSITIVE_INFINITY };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if the provided number is exactly positive zero (`+0`). This is a
|
|
3
|
+
* stricter than `x === 0`, as it will return `false` for `-0`.
|
|
4
|
+
*
|
|
5
|
+
* @module positive-zero
|
|
6
|
+
*/
|
|
7
|
+
export * from "../constants/positive_zero.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Checks if the provided number is a positive zero (`+0`).
|
|
11
|
+
*
|
|
12
|
+
* @param it The number to check.
|
|
13
|
+
* @returns `true` if the provided number is exactly `+0`, otherwise `false`.
|
|
14
|
+
* @category Guards
|
|
15
|
+
* @tags Positive Zero
|
|
16
|
+
*/
|
|
17
|
+
export function isPositiveZero(it: number): it is 0 {
|
|
18
|
+
return (it = +it) === 0 && (1 / it) === (1 / 0);
|
|
19
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a value is a safe integer within the range of `MIN_SAFE_INTEGER`
|
|
3
|
+
* (`-2^53 + 1`) and `MAX_SAFE_INTEGER` (`2^53 - 1`).
|
|
4
|
+
*
|
|
5
|
+
* This is a dependency-free, performant implementation that is functionally-
|
|
6
|
+
* equivalent to the native `Number.isSafeInteger` function.
|
|
7
|
+
*
|
|
8
|
+
* Note: This guard **does not coerce its input to a number** beforehand. The
|
|
9
|
+
* value passed for `number` must already satisfy `typeof number === "number"`.
|
|
10
|
+
*
|
|
11
|
+
* @module safe-integer
|
|
12
|
+
*/
|
|
13
|
+
import { isFinite } from "./finite.js";
|
|
14
|
+
import { MAX_SAFE_INTEGER } from "../constants/max_safe_integer.js";
|
|
15
|
+
import { MIN_SAFE_INTEGER } from "../constants/min_safe_integer.js";
|
|
16
|
+
import type { SafeInteger } from "../types/safe_integer.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Check if a value is a safe integer within the range of `MIN_SAFE_INTEGER`
|
|
20
|
+
* (`-2^53 + 1`) and `MAX_SAFE_INTEGER` (`2^53 - 1`).
|
|
21
|
+
*
|
|
22
|
+
* This is a dependency-free, performant implementation that is functionally-
|
|
23
|
+
* equivalent to the native `Number.isSafeInteger` function.
|
|
24
|
+
*
|
|
25
|
+
* Note: This guard **does not coerce its input to a number** beforehand. The
|
|
26
|
+
* value passed for `number` must already satisfy `typeof number === "number"`.
|
|
27
|
+
*
|
|
28
|
+
* @template {number} N The type of numeric value to check.
|
|
29
|
+
* @param number The value to check.
|
|
30
|
+
* @returns `true` if the value is a safe integer, `false` otherwise.
|
|
31
|
+
* @category Guards
|
|
32
|
+
* @tags Safe Integer
|
|
33
|
+
*/
|
|
34
|
+
export function isSafeInteger<N extends number>(
|
|
35
|
+
number: N,
|
|
36
|
+
): number is SafeInteger<N>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Check if a value is a safe integer within the range of `MIN_SAFE_INTEGER`
|
|
40
|
+
* (`-2^53 + 1`) and `MAX_SAFE_INTEGER` (`2^53 - 1`).
|
|
41
|
+
*
|
|
42
|
+
* Note: This guard **does not coerce its input to a number** beforehand. The
|
|
43
|
+
* value passed for `number` must already satisfy `typeof number === "number"`.
|
|
44
|
+
*
|
|
45
|
+
* @param number The value to check.
|
|
46
|
+
* @returns `true` if the value is a safe integer, `false` otherwise.
|
|
47
|
+
*/
|
|
48
|
+
export function isSafeInteger(number: number): number is SafeInteger;
|
|
49
|
+
|
|
50
|
+
/** @internal */
|
|
51
|
+
export function isSafeInteger(number: unknown): number is SafeInteger {
|
|
52
|
+
return typeof number === "number" && isFinite(number) && (number % 1) === 0 &&
|
|
53
|
+
number >= MIN_SAFE_INTEGER && number <= MAX_SAFE_INTEGER;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER, type SafeInteger };
|
package/src/hypot.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the hypotenuse value using the Pythagorean theorem, which is the
|
|
3
|
+
* sqrt of the sum of the squares of its arguments (`sqrt(a^2 + b^2 + ...`).
|
|
4
|
+
* Avoids overflow or underflow errors.
|
|
5
|
+
*
|
|
6
|
+
* **Note**: This equation is also known as the Euclidean distance or L² norm.
|
|
7
|
+
*
|
|
8
|
+
* @module hypot
|
|
9
|
+
*/
|
|
10
|
+
import { abs } from "./abs.js";
|
|
11
|
+
import { sqrt } from "./sqrt.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Calculates the hypotenuse value using the Pythagorean theorem, which is the
|
|
15
|
+
* sqrt of the sum of the squares of its arguments (`sqrt(a^2 + b^2 + ...)`).
|
|
16
|
+
* Avoids overflow or underflow errors.
|
|
17
|
+
*
|
|
18
|
+
* @param values The numbers to calculate the hypotenuse of.
|
|
19
|
+
* @returns The hypotenuse of the provided numbers (also known as the Euclidean
|
|
20
|
+
* distance or L² norm of the values).
|
|
21
|
+
* @category Trigonometry
|
|
22
|
+
* @tags hypotenuse, pythagorean, euclidean
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* hypot(3, 4); // 5
|
|
26
|
+
* hypot(5, 12); // 13
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export function hypot(...values: number[]): number {
|
|
30
|
+
if (values.length === 0) return 0;
|
|
31
|
+
let hasInfinity = false;
|
|
32
|
+
let hasNaN = false;
|
|
33
|
+
let maximum = 0;
|
|
34
|
+
|
|
35
|
+
for (const value of values) {
|
|
36
|
+
if (value !== value) {
|
|
37
|
+
hasNaN = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (value === Infinity || value === -Infinity) {
|
|
41
|
+
hasInfinity = true;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const magnitude = abs(value);
|
|
45
|
+
if (magnitude > maximum) maximum = magnitude;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (hasInfinity) return Infinity;
|
|
49
|
+
if (hasNaN) return NaN;
|
|
50
|
+
if (maximum === 0) return 0;
|
|
51
|
+
|
|
52
|
+
let sum = 0;
|
|
53
|
+
for (const value of values) {
|
|
54
|
+
const normalized = value / maximum;
|
|
55
|
+
sum += normalized * normalized;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return maximum * sqrt(sum);
|
|
59
|
+
}
|
package/src/ieee754.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IEEE 754 floating point number manipulation.
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions for encoding, decoding, and rounding floating
|
|
5
|
+
* point numbers according to the IEEE 754 standard, for both 16-bit and 32-bit
|
|
6
|
+
* precision. For utilities specific to 16-bit (half-precision) floats, see the
|
|
7
|
+
* `float16` module. For 32-bit (single-precision), see the `float32` module.
|
|
8
|
+
*
|
|
9
|
+
* **Note**: The `float16` and `float32` modules are used under the hood by the
|
|
10
|
+
* `f16round` and `fround` functions, respectively.
|
|
11
|
+
*
|
|
12
|
+
* @module ieee754
|
|
13
|
+
*/
|
|
14
|
+
export * from "./float16/index.js";
|
|
15
|
+
export * from "./float32/index.js";
|
package/src/imul.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performs a 32-bit integer multiplication of two numbers (interpreted as
|
|
3
|
+
* 32-bit integers), returning a 32-bit result.
|
|
4
|
+
*
|
|
5
|
+
* @module imul
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Performs a 32-bit integer multiplication of two numbers (interpreted as
|
|
10
|
+
* 32-bit integers), returning a 32-bit result.
|
|
11
|
+
*
|
|
12
|
+
* @param a The first number (treated as a 32-bit integer).
|
|
13
|
+
* @param b The second number (treated as a 32-bit integer).
|
|
14
|
+
* @returns The result of multiplying the two numbers as 32-bit integers.
|
|
15
|
+
* @category Bitwise
|
|
16
|
+
*/
|
|
17
|
+
export function imul(a: number, b: number): number {
|
|
18
|
+
const ah = (a >>> 16) & 0xffff, al = a & 0xffff;
|
|
19
|
+
const bh = (b >>> 16) & 0xffff, bl = b & 0xffff;
|
|
20
|
+
return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)) | 0;
|
|
21
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # `@nick/math`
|
|
3
|
+
*
|
|
4
|
+
* Standalone implementations of every native API in the `Math` namespace,
|
|
5
|
+
* written in pure TypeScript with zero external dependencies. Distributed as a
|
|
6
|
+
* collection of tree-shakeable submodules so you can pick and choose exactly
|
|
7
|
+
* what features to include based on your specific use case's requirements.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import math from "@nick/math";
|
|
12
|
+
* import assert from "node:assert";
|
|
13
|
+
*
|
|
14
|
+
* // all the same constants from globalThis.Math
|
|
15
|
+
* assert.strictEqual(math.PI, Math.PI);
|
|
16
|
+
* assert.strictEqual(math.E, Math.E);
|
|
17
|
+
* assert.strictEqual(math.SQRT1_2, Math.SQRT1_2);
|
|
18
|
+
* assert.strictEqual(math.LOG10E, Math.LOG10E);
|
|
19
|
+
*
|
|
20
|
+
* // ...and even those from globalThis.Number
|
|
21
|
+
* assert.strictEqual(math.EPSILON, Number.EPSILON);
|
|
22
|
+
* assert.strictEqual(math.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY);
|
|
23
|
+
* assert.strictEqual(math.NaN, Number.NaN);
|
|
24
|
+
* // ...
|
|
25
|
+
* assert.strictEqual(math.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
|
|
26
|
+
*
|
|
27
|
+
* // all the functions from globalThis.Math
|
|
28
|
+
* assert.strictEqual(math.abs(-math.PI), math.PI);
|
|
29
|
+
* assert.strictEqual(math.f16round(math.PI), Math.f16round(Math.PI));
|
|
30
|
+
* // ...
|
|
31
|
+
* assert.strictEqual(math.cos(0.99999999999999), Math.cos(0.99999999999999));
|
|
32
|
+
*
|
|
33
|
+
* // additional, non-standard guards
|
|
34
|
+
* assert.ok(math.isNegativeInfinity(-1 / 0));
|
|
35
|
+
* assert.ok(math.isNegativeZero(-0));
|
|
36
|
+
* assert.ok(math.isPositiveZero(0));
|
|
37
|
+
* // ...
|
|
38
|
+
* assert.ok(math.isFinite(420));
|
|
39
|
+
* ```
|
|
40
|
+
* @module math
|
|
41
|
+
*/
|
|
42
|
+
export * from "./abs.js";
|
|
43
|
+
export * from "./acos.js";
|
|
44
|
+
export * from "./acosh.js";
|
|
45
|
+
export * from "./asin.js";
|
|
46
|
+
export * from "./asinh.js";
|
|
47
|
+
export * from "./atan.js";
|
|
48
|
+
export * from "./atanh.js";
|
|
49
|
+
export * from "./atan2.js";
|
|
50
|
+
export * from "./cbrt.js";
|
|
51
|
+
export * from "./ceil.js";
|
|
52
|
+
export * from "./clamp.js";
|
|
53
|
+
export * from "./clz32.js";
|
|
54
|
+
export * from "./constants/index.js";
|
|
55
|
+
export * from "./cos.js";
|
|
56
|
+
export * from "./cosh.js";
|
|
57
|
+
export * from "./exp.js";
|
|
58
|
+
export * from "./expm1.js";
|
|
59
|
+
export * from "./floor.js";
|
|
60
|
+
export * from "./f16round.js";
|
|
61
|
+
export * from "./fround.js";
|
|
62
|
+
export * from "./guards/index.js";
|
|
63
|
+
export * from "./hypot.js";
|
|
64
|
+
export * from "./ieee754.js";
|
|
65
|
+
export * from "./imul.js";
|
|
66
|
+
export * from "./log.js";
|
|
67
|
+
export * from "./log1p.js";
|
|
68
|
+
export * from "./log2.js";
|
|
69
|
+
export * from "./log10.js";
|
|
70
|
+
export * from "./max.js";
|
|
71
|
+
export * from "./min.js";
|
|
72
|
+
export * from "./pow.js";
|
|
73
|
+
export * from "./random.js";
|
|
74
|
+
export * from "./round.js";
|
|
75
|
+
export * from "./sign.js";
|
|
76
|
+
export * from "./sin.js";
|
|
77
|
+
export * from "./sinh.js";
|
|
78
|
+
export * from "./sqrt.js";
|
|
79
|
+
export * from "./tan.js";
|
|
80
|
+
export * from "./tanh.js";
|
|
81
|
+
export * from "./trunc.js";
|
|
82
|
+
export * from "./types/index.js";
|
|
83
|
+
|
|
84
|
+
export * as default from "./index.js";
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// src/internal/ieee754.ts
|
|
2
|
+
/**
|
|
3
|
+
* Shared generic implementation for IEEE‑754 binary floating‑point
|
|
4
|
+
* encoding, decoding, and rounding.
|
|
5
|
+
*
|
|
6
|
+
* @module internal/ieee754
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
isPositiveInfinity,
|
|
11
|
+
POSITIVE_INFINITY,
|
|
12
|
+
} from "../guards/positive_infinity.js";
|
|
13
|
+
import {
|
|
14
|
+
isNegativeInfinity,
|
|
15
|
+
NEGATIVE_INFINITY,
|
|
16
|
+
} from "../guards/negative_infinity.js";
|
|
17
|
+
import { isNaN, NAN } from "../guards/nan.js";
|
|
18
|
+
import { isNegativeZero, NEGATIVE_ZERO } from "../guards/negative_zero.js";
|
|
19
|
+
import { isPositiveZero, POSITIVE_ZERO } from "../guards/positive_zero.js";
|
|
20
|
+
import { abs } from "../abs.js";
|
|
21
|
+
import { floor } from "../floor.js";
|
|
22
|
+
import { log2 } from "../log2.js";
|
|
23
|
+
import { pow } from "../pow.js";
|
|
24
|
+
import { round } from "../round.js";
|
|
25
|
+
import { BigInt, Number } from "./primordials.js";
|
|
26
|
+
|
|
27
|
+
/** Descriptor for an IEEE‑754 binary floating‑point format. */
|
|
28
|
+
export interface BigIntFloatFormat extends Format {
|
|
29
|
+
/** Controls the output type of the bit pattern. @default {false} */
|
|
30
|
+
bigint: true;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Descriptor for an IEEE‑754 binary floating‑point format. */
|
|
34
|
+
export interface FloatFormat extends Format {
|
|
35
|
+
/** Optional flag indicating the output type should be a number. */
|
|
36
|
+
bigint?: false | undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface Format {
|
|
40
|
+
/** Number of exponent bits (e.g. 8 for binary32). */
|
|
41
|
+
exponent: number;
|
|
42
|
+
/** Number of mantissa bits (e.g. 23 for binary32). */
|
|
43
|
+
mantissa: number;
|
|
44
|
+
/** Exponent bias (e.g. 127 for binary32). */
|
|
45
|
+
bias: number;
|
|
46
|
+
/** Encoded bit‑pattern for NaN. */
|
|
47
|
+
nan: number | bigint;
|
|
48
|
+
/** Encoded bit‑pattern for +∞. */
|
|
49
|
+
positive_infinity: number | bigint;
|
|
50
|
+
/** Encoded bit‑pattern for –∞. */
|
|
51
|
+
negative_infinity: number | bigint;
|
|
52
|
+
/** Encoded bit‑pattern for –0. */
|
|
53
|
+
negative_zero: number | bigint;
|
|
54
|
+
/** Encoded bit‑pattern for +0. */
|
|
55
|
+
positive_zero: number | bigint;
|
|
56
|
+
/** Optional flag indicating whether the output should be a bigint. */
|
|
57
|
+
bigint?: boolean | undefined;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Encode a JS number into an IEEE‑754 bit pattern (as a BigInt).
|
|
62
|
+
*
|
|
63
|
+
* @param value The number to encode.
|
|
64
|
+
* @param fmt Describes exponent/mantissa sizes, bias, and specials.
|
|
65
|
+
* @returns The raw bits (as BigInt).
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
export function encode(value: number, fmt: BigIntFloatFormat): bigint;
|
|
69
|
+
export function encode(value: number, fmt: FloatFormat): number;
|
|
70
|
+
export function encode(
|
|
71
|
+
value: number,
|
|
72
|
+
fmt: FloatFormat | BigIntFloatFormat,
|
|
73
|
+
): number | bigint {
|
|
74
|
+
return (fmt.bigint ? BigInt : Number)(inner_encode(value, fmt));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function inner_encode(value: number, fmt: Format): number | bigint {
|
|
78
|
+
if (isNaN(value)) return fmt.nan;
|
|
79
|
+
if (isPositiveInfinity(value)) return fmt.positive_infinity;
|
|
80
|
+
if (isNegativeInfinity(value)) return fmt.negative_infinity;
|
|
81
|
+
if (isNegativeZero(value)) return fmt.negative_zero;
|
|
82
|
+
if (isPositiveZero(value)) return fmt.positive_zero;
|
|
83
|
+
|
|
84
|
+
const normal = 1 - fmt.bias;
|
|
85
|
+
// subnormal threshold = 2^(1-bias)
|
|
86
|
+
const cutoff = pow(2, normal);
|
|
87
|
+
|
|
88
|
+
const sign = BigInt(value < 0 ? 1 : 0);
|
|
89
|
+
const shift = BigInt(fmt.exponent + fmt.mantissa);
|
|
90
|
+
const absolute = abs(value);
|
|
91
|
+
if (absolute < cutoff) {
|
|
92
|
+
// subnormal
|
|
93
|
+
const scale = normal - fmt.mantissa;
|
|
94
|
+
const mant = BigInt(round(absolute / pow(2, scale)));
|
|
95
|
+
return (sign << shift) | mant;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// normal
|
|
99
|
+
let expo = floor(log2(absolute)), mant = absolute / pow(2, expo);
|
|
100
|
+
if (mant < 1) {
|
|
101
|
+
mant *= 2;
|
|
102
|
+
expo--;
|
|
103
|
+
} else if (mant >= 2) {
|
|
104
|
+
mant /= 2;
|
|
105
|
+
expo++;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const mant_scale = pow(2, fmt.mantissa);
|
|
109
|
+
let mant_bits = round((mant - 1) * mant_scale);
|
|
110
|
+
if (mant_bits === mant_scale) {
|
|
111
|
+
mant_bits = 0;
|
|
112
|
+
expo++;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const biased = expo + fmt.bias;
|
|
116
|
+
if (biased >= (1 << fmt.exponent) - 1) {
|
|
117
|
+
return value < 0 ? fmt.negative_infinity : fmt.positive_infinity;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const e = BigInt(biased);
|
|
121
|
+
const m = BigInt(mant_bits);
|
|
122
|
+
return (sign << shift) | (e << BigInt(fmt.mantissa)) | m;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Decode an IEEE‑754 bit pattern back into a JavaScript number.
|
|
127
|
+
*
|
|
128
|
+
* @param bits The raw bits (BigInt or number).
|
|
129
|
+
* @param fmt Describes exponent/mantissa sizes, bias, and specials.
|
|
130
|
+
* @returns The decoded JS number.
|
|
131
|
+
* @internal
|
|
132
|
+
*/
|
|
133
|
+
export function decode(
|
|
134
|
+
bits: string | bigint | number,
|
|
135
|
+
fmt: FloatFormat,
|
|
136
|
+
): number {
|
|
137
|
+
const b = BigInt(bits);
|
|
138
|
+
|
|
139
|
+
if (b === BigInt(fmt.nan)) return NAN;
|
|
140
|
+
if (b === BigInt(fmt.positive_infinity)) return POSITIVE_INFINITY;
|
|
141
|
+
if (b === BigInt(fmt.negative_infinity)) return NEGATIVE_INFINITY;
|
|
142
|
+
if (b === BigInt(fmt.negative_zero)) return NEGATIVE_ZERO;
|
|
143
|
+
if (b === BigInt(fmt.positive_zero)) return POSITIVE_ZERO;
|
|
144
|
+
|
|
145
|
+
const shift = fmt.exponent + fmt.mantissa;
|
|
146
|
+
const m = BigInt(fmt.mantissa), e = BigInt(fmt.exponent);
|
|
147
|
+
const mask_m = (1n << m) - 1n;
|
|
148
|
+
const mask_e = ((1n << e) - 1n) << m;
|
|
149
|
+
|
|
150
|
+
const sign = ((b >> BigInt(shift)) & 1n) === 1n ? -1 : 1;
|
|
151
|
+
const expo = (b & mask_e) >> m, mant = b & mask_m;
|
|
152
|
+
|
|
153
|
+
if (expo === 0n) {
|
|
154
|
+
// subnormal
|
|
155
|
+
const subx = 1 - fmt.bias;
|
|
156
|
+
return sign * Number(mant) * pow(2, subx - fmt.mantissa);
|
|
157
|
+
} else if (expo === (1n << e) - 1n) {
|
|
158
|
+
if (mant) return NAN;
|
|
159
|
+
if (sign > 0) return POSITIVE_INFINITY;
|
|
160
|
+
return NEGATIVE_INFINITY;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const exp = Number(expo) - fmt.bias;
|
|
164
|
+
return sign * (1 + Number(mant) / pow(2, fmt.mantissa)) * pow(2, exp);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Round a JS number to the nearest representable value in the given format.
|
|
169
|
+
*
|
|
170
|
+
* @param value The number to round.
|
|
171
|
+
* @param fmt Describes exponent/mantissa sizes, bias, and specials.
|
|
172
|
+
* @returns The rounded JS number.
|
|
173
|
+
* @internal
|
|
174
|
+
*/
|
|
175
|
+
export function fround(value: number, fmt?: FloatFormat): number {
|
|
176
|
+
fmt ??= float32;
|
|
177
|
+
return decode(encode(value, fmt), fmt);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Represents the IEEE-754 binary16 (half-precision) floating-point format.
|
|
182
|
+
*
|
|
183
|
+
* @internal
|
|
184
|
+
*/
|
|
185
|
+
export const float16 = {
|
|
186
|
+
exponent: 5,
|
|
187
|
+
mantissa: 10,
|
|
188
|
+
bias: 15,
|
|
189
|
+
nan: 0x7E00n,
|
|
190
|
+
positive_infinity: 0x7C00n,
|
|
191
|
+
negative_infinity: 0xFC00n,
|
|
192
|
+
negative_zero: 0x8000n,
|
|
193
|
+
positive_zero: 0n,
|
|
194
|
+
} as const satisfies FloatFormat;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Represents the IEEE-754 binary32 (single-precision) floating-point format.
|
|
198
|
+
*
|
|
199
|
+
* @internal
|
|
200
|
+
*/
|
|
201
|
+
export const float32 = {
|
|
202
|
+
exponent: 8,
|
|
203
|
+
mantissa: 23,
|
|
204
|
+
bias: 127,
|
|
205
|
+
nan: 0x7FC00000n,
|
|
206
|
+
positive_infinity: 0x7F800000n,
|
|
207
|
+
negative_infinity: 0xFF800000n,
|
|
208
|
+
negative_zero: 0x80000000n,
|
|
209
|
+
positive_zero: 0n,
|
|
210
|
+
} as const satisfies FloatFormat;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Represents the IEEE-754 binary64 (double-precision) floating-point format.
|
|
214
|
+
*
|
|
215
|
+
* @internal
|
|
216
|
+
*/
|
|
217
|
+
export const float64 = {
|
|
218
|
+
exponent: 11,
|
|
219
|
+
mantissa: 52,
|
|
220
|
+
bias: 1023,
|
|
221
|
+
nan: 0x7FF8000000000000n,
|
|
222
|
+
positive_infinity: 0x7FF0000000000000n,
|
|
223
|
+
negative_infinity: 0xFFF0000000000000n,
|
|
224
|
+
negative_zero: 0x8000000000000000n,
|
|
225
|
+
positive_zero: 0n,
|
|
226
|
+
} as const satisfies FloatFormat;
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Represents the IEEE-754 binary128 (quadruple-precision) floating-point
|
|
230
|
+
* format.
|
|
231
|
+
*
|
|
232
|
+
* @internal
|
|
233
|
+
*/
|
|
234
|
+
export const float128 = {
|
|
235
|
+
exponent: 15,
|
|
236
|
+
mantissa: 112,
|
|
237
|
+
bias: 16383,
|
|
238
|
+
nan: 0x7FFF8000000000000000000000000000n,
|
|
239
|
+
positive_infinity: 0x7FFF0000000000000000000000000000n,
|
|
240
|
+
negative_infinity: 0xFFFF0000000000000000000000000000n,
|
|
241
|
+
negative_zero: 0x80000000000000000000000000000000n,
|
|
242
|
+
positive_zero: 0n,
|
|
243
|
+
} as const satisfies FloatFormat;
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Represents all supported IEEE-754 floating-point formats.
|
|
247
|
+
*
|
|
248
|
+
* @internal
|
|
249
|
+
*/
|
|
250
|
+
export const formats = {
|
|
251
|
+
float16,
|
|
252
|
+
float32,
|
|
253
|
+
float64,
|
|
254
|
+
float128,
|
|
255
|
+
} as const satisfies Record<string, FloatFormat>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export const Date: DateConstructor = globalThis.Date;
|
|
2
|
+
export const DateNow = Date.now;
|
|
3
|
+
export const DateUTC = Date.UTC;
|
|
4
|
+
export const DateParse = Date.parse;
|
|
5
|
+
export const DatePrototype = Date.prototype;
|
|
6
|
+
|
|
7
|
+
export const String: StringConstructor = globalThis.String;
|
|
8
|
+
export const StringPrototype = String.prototype;
|
|
9
|
+
|
|
10
|
+
export const Number: NumberConstructor = globalThis.Number;
|
|
11
|
+
export const NumberPrototype = Number.prototype;
|
|
12
|
+
|
|
13
|
+
export const BigInt: BigIntConstructor = globalThis.BigInt;
|
|
14
|
+
export const BigIntAsIntN = BigInt.asIntN.bind(BigInt);
|
|
15
|
+
export const BigIntAsUintN = BigInt.asUintN.bind(BigInt);
|
|
16
|
+
export const BigIntPrototype = BigInt.prototype;
|
|
17
|
+
|
|
18
|
+
export const Object: ObjectConstructor = globalThis.Object;
|
|
19
|
+
export const ObjectPrototype = Object.prototype;
|
|
20
|
+
|
|
21
|
+
export const Array: ArrayConstructor = globalThis.Array;
|
|
22
|
+
export const ArrayFrom: typeof Array.from = Array.from.bind(Array);
|
|
23
|
+
export const ArrayPrototype = Array.prototype;
|
|
24
|
+
|
|
25
|
+
export const Function: FunctionConstructor = globalThis.Function;
|
|
26
|
+
export const FunctionPrototype = Function.prototype;
|
|
27
|
+
|
|
28
|
+
export const Symbol: SymbolConstructor = globalThis.Symbol;
|
|
29
|
+
export const SymbolPrototype: typeof Symbol.prototype = Symbol.prototype;
|
|
30
|
+
export const SymbolFor: typeof Symbol.for = Symbol.for;
|
|
31
|
+
export const SymbolIterator: typeof Symbol.iterator = Symbol.iterator;
|
|
32
|
+
export const SymbolToStringTag: typeof Symbol.toStringTag = Symbol.toStringTag;
|
|
33
|
+
export const SymbolToPrimitive: typeof Symbol.toPrimitive = Symbol.toPrimitive;
|
package/src/log.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the natural logarithm of a number (logₑ).
|
|
3
|
+
*
|
|
4
|
+
* @module log
|
|
5
|
+
*/
|
|
6
|
+
import { EPSILON } from "./constants/epsilon.js";
|
|
7
|
+
import { LN2 } from "./constants/ln2.js";
|
|
8
|
+
import { NAN } from "./constants/nan.js";
|
|
9
|
+
import { POSITIVE_INFINITY } from "./constants/positive_infinity.js";
|
|
10
|
+
import { NEGATIVE_INFINITY } from "./constants/negative_infinity.js";
|
|
11
|
+
import { abs } from "./abs.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Calculates the natural logarithm of a number (logₑ).
|
|
15
|
+
*
|
|
16
|
+
* @param x The number to calculate the natural logarithm of (logₑ)
|
|
17
|
+
* @returns The natural logarithm of the provided number.
|
|
18
|
+
* @category Logarithmic
|
|
19
|
+
*/
|
|
20
|
+
export function log(x: number): number {
|
|
21
|
+
if ((x = +x) !== x || x < 0) return NAN; // NaN for x < 0
|
|
22
|
+
if (x === 0) return NEGATIVE_INFINITY; // -Infinity for x <= 0
|
|
23
|
+
if (x === 1) return 0; // 0 for x = 1
|
|
24
|
+
if (x === POSITIVE_INFINITY) return x; // Infinity for x = Infinity
|
|
25
|
+
|
|
26
|
+
const seriesEpsilon = EPSILON * 16;
|
|
27
|
+
let n = 0;
|
|
28
|
+
while (x > 2) x /= 2, n++;
|
|
29
|
+
|
|
30
|
+
const z = (x - 1) / (x + 1), z2 = z * z;
|
|
31
|
+
let sum = 0, term = z, i = 1;
|
|
32
|
+
|
|
33
|
+
// series expansion for ln(1+z) converges faster when z is [-1, 1]
|
|
34
|
+
while (abs(term) >= seriesEpsilon) {
|
|
35
|
+
sum += term / i;
|
|
36
|
+
term *= z2;
|
|
37
|
+
i += 2;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ln(x) + adjustment factor for original input
|
|
41
|
+
return 2 * sum + n * LN2;
|
|
42
|
+
}
|
package/src/log10.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the base-10 logarithm of a number.
|
|
3
|
+
*
|
|
4
|
+
* @module log10
|
|
5
|
+
*/
|
|
6
|
+
import { LOG10E } from "./constants/log10e.js";
|
|
7
|
+
import { log } from "./log.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Calculates the base-10 logarithm of a number.
|
|
11
|
+
*
|
|
12
|
+
* @param x The number to calculate the base-10 logarithm of (log₁₀)
|
|
13
|
+
* @returns The base-10 logarithm of the provided number.
|
|
14
|
+
* @category Logarithmic
|
|
15
|
+
*/
|
|
16
|
+
export function log10(x: number): number {
|
|
17
|
+
return log(x) * LOG10E;
|
|
18
|
+
}
|
package/src/log1p.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the natural logarithm of 1 + x (`log(1 + x)`), accurately even
|
|
3
|
+
* for very small values of x.
|
|
4
|
+
*
|
|
5
|
+
* @module log1p
|
|
6
|
+
*/
|
|
7
|
+
import { EPSILON } from "./constants/epsilon.js";
|
|
8
|
+
import { NAN } from "./constants/nan.js";
|
|
9
|
+
import { NEGATIVE_INFINITY } from "./constants/negative_infinity.js";
|
|
10
|
+
import { abs } from "./abs.js";
|
|
11
|
+
import { log } from "./log.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Calculates the natural logarithm of 1 + x (`log(1 + x)`), accurately even
|
|
15
|
+
* for very small values of x.
|
|
16
|
+
*
|
|
17
|
+
* @param x The number whose logarithm of (1 + x) is to be calculated.
|
|
18
|
+
* @returns The natural logarithm of 1 + x.
|
|
19
|
+
* @category Logarithmic
|
|
20
|
+
*/
|
|
21
|
+
export function log1p(x: number): number {
|
|
22
|
+
if (x === -1) return NEGATIVE_INFINITY;
|
|
23
|
+
if (x < -1) return NAN;
|
|
24
|
+
if (abs(x) < EPSILON) return x;
|
|
25
|
+
return log(1 + x);
|
|
26
|
+
}
|
package/src/log2.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the base-2 logarithm of a number (log₂).
|
|
3
|
+
*
|
|
4
|
+
* @module log2
|
|
5
|
+
*/
|
|
6
|
+
import { LOG2E } from "./constants/log2e.js";
|
|
7
|
+
import { log } from "./log.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Calculates the base-2 logarithm of a number (log₂).
|
|
11
|
+
*
|
|
12
|
+
* @param x The number to calculate the base-2 logarithm of (log₂)
|
|
13
|
+
* @returns The base-2 logarithm of the provided number.
|
|
14
|
+
* @category Logarithmic
|
|
15
|
+
* @see {@linkcode log} for the natural logarithm.
|
|
16
|
+
* @see {@linkcode log10} for the base-10 logarithm.
|
|
17
|
+
* @see {@linkcode LOG2E} for the base-2 logarithm of {@linkcode E}.
|
|
18
|
+
*/
|
|
19
|
+
export function log2(x: number): number {
|
|
20
|
+
return log(x) * LOG2E;
|
|
21
|
+
}
|