@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.
Files changed (806) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +889 -0
  3. package/cjs/abs.d.ts +14 -0
  4. package/cjs/abs.d.ts.map +1 -0
  5. package/cjs/abs.js +22 -0
  6. package/cjs/abs.js.map +1 -0
  7. package/cjs/acos.d.ts +17 -0
  8. package/cjs/acos.d.ts.map +1 -0
  9. package/cjs/acos.js +27 -0
  10. package/cjs/acos.js.map +1 -0
  11. package/cjs/acosh.d.ts +11 -0
  12. package/cjs/acosh.d.ts.map +1 -0
  13. package/cjs/acosh.js +35 -0
  14. package/cjs/acosh.js.map +1 -0
  15. package/cjs/asin.d.ts +11 -0
  16. package/cjs/asin.d.ts.map +1 -0
  17. package/cjs/asin.js +28 -0
  18. package/cjs/asin.js.map +1 -0
  19. package/cjs/asinh.d.ts +9 -0
  20. package/cjs/asinh.d.ts.map +1 -0
  21. package/cjs/asinh.js +26 -0
  22. package/cjs/asinh.js.map +1 -0
  23. package/cjs/atan.d.ts +11 -0
  24. package/cjs/atan.d.ts.map +1 -0
  25. package/cjs/atan.js +65 -0
  26. package/cjs/atan.js.map +1 -0
  27. package/cjs/atan2.d.ts +12 -0
  28. package/cjs/atan2.d.ts.map +1 -0
  29. package/cjs/atan2.js +70 -0
  30. package/cjs/atan2.js.map +1 -0
  31. package/cjs/atanh.d.ts +11 -0
  32. package/cjs/atanh.d.ts.map +1 -0
  33. package/cjs/atanh.js +32 -0
  34. package/cjs/atanh.js.map +1 -0
  35. package/cjs/cbrt.d.ts +9 -0
  36. package/cjs/cbrt.d.ts.map +1 -0
  37. package/cjs/cbrt.js +26 -0
  38. package/cjs/cbrt.js.map +1 -0
  39. package/cjs/ceil.d.ts +15 -0
  40. package/cjs/ceil.d.ts.map +1 -0
  41. package/cjs/ceil.js +34 -0
  42. package/cjs/ceil.js.map +1 -0
  43. package/cjs/clamp.d.ts +15 -0
  44. package/cjs/clamp.d.ts.map +1 -0
  45. package/cjs/clamp.js +32 -0
  46. package/cjs/clamp.js.map +1 -0
  47. package/cjs/clz32.d.ts +20 -0
  48. package/cjs/clz32.d.ts.map +1 -0
  49. package/cjs/clz32.js +48 -0
  50. package/cjs/clz32.js.map +1 -0
  51. package/cjs/constants/e.d.ts +17 -0
  52. package/cjs/constants/e.d.ts.map +1 -0
  53. package/cjs/constants/e.js +19 -0
  54. package/cjs/constants/e.js.map +1 -0
  55. package/cjs/constants/epsilon.d.ts +24 -0
  56. package/cjs/constants/epsilon.d.ts.map +1 -0
  57. package/cjs/constants/epsilon.js +26 -0
  58. package/cjs/constants/epsilon.js.map +1 -0
  59. package/cjs/constants/index.d.ts +23 -0
  60. package/cjs/constants/index.d.ts.map +1 -0
  61. package/cjs/constants/index.js +39 -0
  62. package/cjs/constants/index.js.map +1 -0
  63. package/cjs/constants/infinity.d.ts +3 -0
  64. package/cjs/constants/infinity.d.ts.map +1 -0
  65. package/cjs/constants/infinity.js +19 -0
  66. package/cjs/constants/infinity.js.map +1 -0
  67. package/cjs/constants/ln10.d.ts +10 -0
  68. package/cjs/constants/ln10.d.ts.map +1 -0
  69. package/cjs/constants/ln10.js +12 -0
  70. package/cjs/constants/ln10.js.map +1 -0
  71. package/cjs/constants/ln2.d.ts +10 -0
  72. package/cjs/constants/ln2.d.ts.map +1 -0
  73. package/cjs/constants/ln2.js +12 -0
  74. package/cjs/constants/ln2.js.map +1 -0
  75. package/cjs/constants/log10e.d.ts +10 -0
  76. package/cjs/constants/log10e.d.ts.map +1 -0
  77. package/cjs/constants/log10e.js +12 -0
  78. package/cjs/constants/log10e.js.map +1 -0
  79. package/cjs/constants/log2e.d.ts +10 -0
  80. package/cjs/constants/log2e.d.ts.map +1 -0
  81. package/cjs/constants/log2e.js +12 -0
  82. package/cjs/constants/log2e.js.map +1 -0
  83. package/cjs/constants/max_safe_integer.d.ts +11 -0
  84. package/cjs/constants/max_safe_integer.d.ts.map +1 -0
  85. package/cjs/constants/max_safe_integer.js +13 -0
  86. package/cjs/constants/max_safe_integer.js.map +1 -0
  87. package/cjs/constants/max_value.d.ts +10 -0
  88. package/cjs/constants/max_value.d.ts.map +1 -0
  89. package/cjs/constants/max_value.js +12 -0
  90. package/cjs/constants/max_value.js.map +1 -0
  91. package/cjs/constants/min_safe_integer.d.ts +12 -0
  92. package/cjs/constants/min_safe_integer.d.ts.map +1 -0
  93. package/cjs/constants/min_safe_integer.js +14 -0
  94. package/cjs/constants/min_safe_integer.js.map +1 -0
  95. package/cjs/constants/min_value.d.ts +10 -0
  96. package/cjs/constants/min_value.d.ts.map +1 -0
  97. package/cjs/constants/min_value.js +12 -0
  98. package/cjs/constants/min_value.js.map +1 -0
  99. package/cjs/constants/nan.d.ts +47 -0
  100. package/cjs/constants/nan.d.ts.map +1 -0
  101. package/cjs/constants/nan.js +30 -0
  102. package/cjs/constants/nan.js.map +1 -0
  103. package/cjs/constants/negative_infinity.d.ts +28 -0
  104. package/cjs/constants/negative_infinity.d.ts.map +1 -0
  105. package/cjs/constants/negative_infinity.js +15 -0
  106. package/cjs/constants/negative_infinity.js.map +1 -0
  107. package/cjs/constants/negative_zero.d.ts +31 -0
  108. package/cjs/constants/negative_zero.d.ts.map +1 -0
  109. package/cjs/constants/negative_zero.js +21 -0
  110. package/cjs/constants/negative_zero.js.map +1 -0
  111. package/cjs/constants/pi.d.ts +10 -0
  112. package/cjs/constants/pi.d.ts.map +1 -0
  113. package/cjs/constants/pi.js +12 -0
  114. package/cjs/constants/pi.js.map +1 -0
  115. package/cjs/constants/positive_infinity.d.ts +29 -0
  116. package/cjs/constants/positive_infinity.d.ts.map +1 -0
  117. package/cjs/constants/positive_infinity.js +16 -0
  118. package/cjs/constants/positive_infinity.js.map +1 -0
  119. package/cjs/constants/positive_zero.d.ts +38 -0
  120. package/cjs/constants/positive_zero.d.ts.map +1 -0
  121. package/cjs/constants/positive_zero.js +36 -0
  122. package/cjs/constants/positive_zero.js.map +1 -0
  123. package/cjs/constants/sqrt1_2.d.ts +9 -0
  124. package/cjs/constants/sqrt1_2.d.ts.map +1 -0
  125. package/cjs/constants/sqrt1_2.js +11 -0
  126. package/cjs/constants/sqrt1_2.js.map +1 -0
  127. package/cjs/constants/sqrt2.d.ts +9 -0
  128. package/cjs/constants/sqrt2.d.ts.map +1 -0
  129. package/cjs/constants/sqrt2.js +11 -0
  130. package/cjs/constants/sqrt2.js.map +1 -0
  131. package/cjs/cos.d.ts +10 -0
  132. package/cjs/cos.d.ts.map +1 -0
  133. package/cjs/cos.js +32 -0
  134. package/cjs/cos.js.map +1 -0
  135. package/cjs/cosh.d.ts +10 -0
  136. package/cjs/cosh.d.ts.map +1 -0
  137. package/cjs/cosh.js +21 -0
  138. package/cjs/cosh.js.map +1 -0
  139. package/cjs/exp.d.ts +20 -0
  140. package/cjs/exp.d.ts.map +1 -0
  141. package/cjs/exp.js +48 -0
  142. package/cjs/exp.js.map +1 -0
  143. package/cjs/expm1.d.ts +11 -0
  144. package/cjs/expm1.d.ts.map +1 -0
  145. package/cjs/expm1.js +38 -0
  146. package/cjs/expm1.js.map +1 -0
  147. package/cjs/f16round.d.ts +24 -0
  148. package/cjs/f16round.d.ts.map +1 -0
  149. package/cjs/f16round.js +42 -0
  150. package/cjs/f16round.js.map +1 -0
  151. package/cjs/float16/constants.d.ts +97 -0
  152. package/cjs/float16/constants.d.ts.map +1 -0
  153. package/cjs/float16/constants.js +99 -0
  154. package/cjs/float16/constants.js.map +1 -0
  155. package/cjs/float16/decode.d.ts +40 -0
  156. package/cjs/float16/decode.d.ts.map +1 -0
  157. package/cjs/float16/decode.js +67 -0
  158. package/cjs/float16/decode.js.map +1 -0
  159. package/cjs/float16/encode.d.ts +67 -0
  160. package/cjs/float16/encode.d.ts.map +1 -0
  161. package/cjs/float16/encode.js +77 -0
  162. package/cjs/float16/encode.js.map +1 -0
  163. package/cjs/float16/guards.d.ts +22 -0
  164. package/cjs/float16/guards.d.ts.map +1 -0
  165. package/cjs/float16/guards.js +15 -0
  166. package/cjs/float16/guards.js.map +1 -0
  167. package/cjs/float16/index.d.ts +11 -0
  168. package/cjs/float16/index.d.ts.map +1 -0
  169. package/cjs/float16/index.js +27 -0
  170. package/cjs/float16/index.js.map +1 -0
  171. package/cjs/float16/round.d.ts +25 -0
  172. package/cjs/float16/round.d.ts.map +1 -0
  173. package/cjs/float16/round.js +46 -0
  174. package/cjs/float16/round.js.map +1 -0
  175. package/cjs/float32/constants.d.ts +96 -0
  176. package/cjs/float32/constants.d.ts.map +1 -0
  177. package/cjs/float32/constants.js +98 -0
  178. package/cjs/float32/constants.js.map +1 -0
  179. package/cjs/float32/decode.d.ts +38 -0
  180. package/cjs/float32/decode.d.ts.map +1 -0
  181. package/cjs/float32/decode.js +70 -0
  182. package/cjs/float32/decode.js.map +1 -0
  183. package/cjs/float32/encode.d.ts +50 -0
  184. package/cjs/float32/encode.d.ts.map +1 -0
  185. package/cjs/float32/encode.js +77 -0
  186. package/cjs/float32/encode.js.map +1 -0
  187. package/cjs/float32/guards.d.ts +37 -0
  188. package/cjs/float32/guards.d.ts.map +1 -0
  189. package/cjs/float32/guards.js +20 -0
  190. package/cjs/float32/guards.js.map +1 -0
  191. package/cjs/float32/index.d.ts +11 -0
  192. package/cjs/float32/index.d.ts.map +1 -0
  193. package/cjs/float32/index.js +27 -0
  194. package/cjs/float32/index.js.map +1 -0
  195. package/cjs/float32/round.d.ts +23 -0
  196. package/cjs/float32/round.d.ts.map +1 -0
  197. package/cjs/float32/round.js +36 -0
  198. package/cjs/float32/round.js.map +1 -0
  199. package/cjs/floor.d.ts +10 -0
  200. package/cjs/floor.d.ts.map +1 -0
  201. package/cjs/floor.js +32 -0
  202. package/cjs/floor.js.map +1 -0
  203. package/cjs/fround.d.ts +23 -0
  204. package/cjs/fround.d.ts.map +1 -0
  205. package/cjs/fround.js +35 -0
  206. package/cjs/fround.js.map +1 -0
  207. package/cjs/guards/finite.d.ts +23 -0
  208. package/cjs/guards/finite.d.ts.map +1 -0
  209. package/cjs/guards/finite.js +21 -0
  210. package/cjs/guards/finite.js.map +1 -0
  211. package/cjs/guards/index.d.ts +50 -0
  212. package/cjs/guards/index.d.ts.map +1 -0
  213. package/cjs/guards/index.js +66 -0
  214. package/cjs/guards/index.js.map +1 -0
  215. package/cjs/guards/infinity.d.ts +3 -0
  216. package/cjs/guards/infinity.d.ts.map +1 -0
  217. package/cjs/guards/infinity.js +19 -0
  218. package/cjs/guards/infinity.js.map +1 -0
  219. package/cjs/guards/integer.d.ts +47 -0
  220. package/cjs/guards/integer.d.ts.map +1 -0
  221. package/cjs/guards/integer.js +23 -0
  222. package/cjs/guards/integer.js.map +1 -0
  223. package/cjs/guards/nan.d.ts +61 -0
  224. package/cjs/guards/nan.d.ts.map +1 -0
  225. package/cjs/guards/nan.js +68 -0
  226. package/cjs/guards/nan.js.map +1 -0
  227. package/cjs/guards/negative_infinity.d.ts +19 -0
  228. package/cjs/guards/negative_infinity.d.ts.map +1 -0
  229. package/cjs/guards/negative_infinity.js +25 -0
  230. package/cjs/guards/negative_infinity.js.map +1 -0
  231. package/cjs/guards/negative_zero.d.ts +12 -0
  232. package/cjs/guards/negative_zero.d.ts.map +1 -0
  233. package/cjs/guards/negative_zero.js +24 -0
  234. package/cjs/guards/negative_zero.js.map +1 -0
  235. package/cjs/guards/positive_infinity.d.ts +19 -0
  236. package/cjs/guards/positive_infinity.d.ts.map +1 -0
  237. package/cjs/guards/positive_infinity.js +25 -0
  238. package/cjs/guards/positive_infinity.js.map +1 -0
  239. package/cjs/guards/positive_zero.d.ts +17 -0
  240. package/cjs/guards/positive_zero.d.ts.map +1 -0
  241. package/cjs/guards/positive_zero.js +36 -0
  242. package/cjs/guards/positive_zero.js.map +1 -0
  243. package/cjs/guards/safe_integer.d.ts +33 -0
  244. package/cjs/guards/safe_integer.d.ts.map +1 -0
  245. package/cjs/guards/safe_integer.js +27 -0
  246. package/cjs/guards/safe_integer.js.map +1 -0
  247. package/cjs/hypot.d.ts +18 -0
  248. package/cjs/hypot.d.ts.map +1 -0
  249. package/cjs/hypot.js +63 -0
  250. package/cjs/hypot.js.map +1 -0
  251. package/cjs/ieee754.d.ts +16 -0
  252. package/cjs/ieee754.d.ts.map +1 -0
  253. package/cjs/ieee754.js +32 -0
  254. package/cjs/ieee754.js.map +1 -0
  255. package/cjs/imul.d.ts +17 -0
  256. package/cjs/imul.d.ts.map +1 -0
  257. package/cjs/imul.js +24 -0
  258. package/cjs/imul.js.map +1 -0
  259. package/cjs/index.d.ts +84 -0
  260. package/cjs/index.d.ts.map +1 -0
  261. package/cjs/index.js +113 -0
  262. package/cjs/index.js.map +1 -0
  263. package/cjs/internal/ieee754.d.ts +174 -0
  264. package/cjs/internal/ieee754.d.ts.map +1 -0
  265. package/cjs/internal/ieee754.js +200 -0
  266. package/cjs/internal/ieee754.js.map +1 -0
  267. package/cjs/internal/primordials.d.ts +30 -0
  268. package/cjs/internal/primordials.d.ts.map +1 -0
  269. package/cjs/internal/primordials.js +30 -0
  270. package/cjs/internal/primordials.js.map +1 -0
  271. package/cjs/log.d.ts +9 -0
  272. package/cjs/log.d.ts.map +1 -0
  273. package/cjs/log.js +46 -0
  274. package/cjs/log.js.map +1 -0
  275. package/cjs/log10.d.ts +9 -0
  276. package/cjs/log10.d.ts.map +1 -0
  277. package/cjs/log10.js +21 -0
  278. package/cjs/log10.js.map +1 -0
  279. package/cjs/log1p.d.ts +10 -0
  280. package/cjs/log1p.d.ts.map +1 -0
  281. package/cjs/log1p.js +32 -0
  282. package/cjs/log1p.js.map +1 -0
  283. package/cjs/log2.d.ts +12 -0
  284. package/cjs/log2.d.ts.map +1 -0
  285. package/cjs/log2.js +24 -0
  286. package/cjs/log2.js.map +1 -0
  287. package/cjs/max.d.ts +22 -0
  288. package/cjs/max.d.ts.map +1 -0
  289. package/cjs/max.js +51 -0
  290. package/cjs/max.js.map +1 -0
  291. package/cjs/min.d.ts +10 -0
  292. package/cjs/min.d.ts.map +1 -0
  293. package/cjs/min.js +36 -0
  294. package/cjs/min.js.map +1 -0
  295. package/cjs/package.json +3 -0
  296. package/cjs/pow.d.ts +31 -0
  297. package/cjs/pow.d.ts.map +1 -0
  298. package/cjs/pow.js +36 -0
  299. package/cjs/pow.js.map +1 -0
  300. package/cjs/random.d.ts +93 -0
  301. package/cjs/random.d.ts.map +1 -0
  302. package/cjs/random.js +242 -0
  303. package/cjs/random.js.map +1 -0
  304. package/cjs/round.d.ts +9 -0
  305. package/cjs/round.d.ts.map +1 -0
  306. package/cjs/round.js +24 -0
  307. package/cjs/round.js.map +1 -0
  308. package/cjs/sign.d.ts +17 -0
  309. package/cjs/sign.d.ts.map +1 -0
  310. package/cjs/sign.js +22 -0
  311. package/cjs/sign.js.map +1 -0
  312. package/cjs/sin.d.ts +14 -0
  313. package/cjs/sin.d.ts.map +1 -0
  314. package/cjs/sin.js +31 -0
  315. package/cjs/sin.js.map +1 -0
  316. package/cjs/sinh.d.ts +14 -0
  317. package/cjs/sinh.d.ts.map +1 -0
  318. package/cjs/sinh.js +22 -0
  319. package/cjs/sinh.js.map +1 -0
  320. package/cjs/sqrt.d.ts +19 -0
  321. package/cjs/sqrt.d.ts.map +1 -0
  322. package/cjs/sqrt.js +45 -0
  323. package/cjs/sqrt.js.map +1 -0
  324. package/cjs/tan.d.ts +9 -0
  325. package/cjs/tan.d.ts.map +1 -0
  326. package/cjs/tan.js +26 -0
  327. package/cjs/tan.js.map +1 -0
  328. package/cjs/tanh.d.ts +17 -0
  329. package/cjs/tanh.d.ts.map +1 -0
  330. package/cjs/tanh.js +34 -0
  331. package/cjs/tanh.js.map +1 -0
  332. package/cjs/trunc.d.ts +21 -0
  333. package/cjs/trunc.d.ts.map +1 -0
  334. package/cjs/trunc.js +50 -0
  335. package/cjs/trunc.js.map +1 -0
  336. package/cjs/types/finite.d.ts +16 -0
  337. package/cjs/types/finite.d.ts.map +1 -0
  338. package/cjs/types/finite.js +4 -0
  339. package/cjs/types/finite.js.map +1 -0
  340. package/cjs/types/float.d.ts +65 -0
  341. package/cjs/types/float.d.ts.map +1 -0
  342. package/cjs/types/float.js +4 -0
  343. package/cjs/types/float.js.map +1 -0
  344. package/cjs/types/index.d.ts +6 -0
  345. package/cjs/types/index.d.ts.map +1 -0
  346. package/cjs/types/index.js +22 -0
  347. package/cjs/types/index.js.map +1 -0
  348. package/cjs/types/integer.d.ts +147 -0
  349. package/cjs/types/integer.d.ts.map +1 -0
  350. package/cjs/types/integer.js +5 -0
  351. package/cjs/types/integer.js.map +1 -0
  352. package/cjs/types/precision.d.ts +46 -0
  353. package/cjs/types/precision.d.ts.map +1 -0
  354. package/cjs/types/precision.js +9 -0
  355. package/cjs/types/precision.js.map +1 -0
  356. package/cjs/types/safe_integer.d.ts +17 -0
  357. package/cjs/types/safe_integer.d.ts.map +1 -0
  358. package/cjs/types/safe_integer.js +5 -0
  359. package/cjs/types/safe_integer.js.map +1 -0
  360. package/esm/abs.d.ts +14 -0
  361. package/esm/abs.d.ts.map +1 -0
  362. package/esm/abs.js +19 -0
  363. package/esm/abs.js.map +1 -0
  364. package/esm/acos.d.ts +17 -0
  365. package/esm/acos.d.ts.map +1 -0
  366. package/esm/acos.js +24 -0
  367. package/esm/acos.js.map +1 -0
  368. package/esm/acosh.d.ts +11 -0
  369. package/esm/acosh.d.ts.map +1 -0
  370. package/esm/acosh.js +32 -0
  371. package/esm/acosh.js.map +1 -0
  372. package/esm/asin.d.ts +11 -0
  373. package/esm/asin.d.ts.map +1 -0
  374. package/esm/asin.js +25 -0
  375. package/esm/asin.js.map +1 -0
  376. package/esm/asinh.d.ts +9 -0
  377. package/esm/asinh.d.ts.map +1 -0
  378. package/esm/asinh.js +23 -0
  379. package/esm/asinh.js.map +1 -0
  380. package/esm/atan.d.ts +11 -0
  381. package/esm/atan.d.ts.map +1 -0
  382. package/esm/atan.js +62 -0
  383. package/esm/atan.js.map +1 -0
  384. package/esm/atan2.d.ts +12 -0
  385. package/esm/atan2.d.ts.map +1 -0
  386. package/esm/atan2.js +67 -0
  387. package/esm/atan2.js.map +1 -0
  388. package/esm/atanh.d.ts +11 -0
  389. package/esm/atanh.d.ts.map +1 -0
  390. package/esm/atanh.js +29 -0
  391. package/esm/atanh.js.map +1 -0
  392. package/esm/cbrt.d.ts +9 -0
  393. package/esm/cbrt.d.ts.map +1 -0
  394. package/esm/cbrt.js +23 -0
  395. package/esm/cbrt.js.map +1 -0
  396. package/esm/ceil.d.ts +15 -0
  397. package/esm/ceil.d.ts.map +1 -0
  398. package/esm/ceil.js +31 -0
  399. package/esm/ceil.js.map +1 -0
  400. package/esm/clamp.d.ts +15 -0
  401. package/esm/clamp.d.ts.map +1 -0
  402. package/esm/clamp.js +29 -0
  403. package/esm/clamp.js.map +1 -0
  404. package/esm/clz32.d.ts +20 -0
  405. package/esm/clz32.d.ts.map +1 -0
  406. package/esm/clz32.js +45 -0
  407. package/esm/clz32.js.map +1 -0
  408. package/esm/constants/e.d.ts +17 -0
  409. package/esm/constants/e.d.ts.map +1 -0
  410. package/esm/constants/e.js +16 -0
  411. package/esm/constants/e.js.map +1 -0
  412. package/esm/constants/epsilon.d.ts +24 -0
  413. package/esm/constants/epsilon.d.ts.map +1 -0
  414. package/esm/constants/epsilon.js +23 -0
  415. package/esm/constants/epsilon.js.map +1 -0
  416. package/esm/constants/index.d.ts +23 -0
  417. package/esm/constants/index.d.ts.map +1 -0
  418. package/esm/constants/index.js +23 -0
  419. package/esm/constants/index.js.map +1 -0
  420. package/esm/constants/infinity.d.ts +3 -0
  421. package/esm/constants/infinity.d.ts.map +1 -0
  422. package/esm/constants/infinity.js +3 -0
  423. package/esm/constants/infinity.js.map +1 -0
  424. package/esm/constants/ln10.d.ts +10 -0
  425. package/esm/constants/ln10.d.ts.map +1 -0
  426. package/esm/constants/ln10.js +9 -0
  427. package/esm/constants/ln10.js.map +1 -0
  428. package/esm/constants/ln2.d.ts +10 -0
  429. package/esm/constants/ln2.d.ts.map +1 -0
  430. package/esm/constants/ln2.js +9 -0
  431. package/esm/constants/ln2.js.map +1 -0
  432. package/esm/constants/log10e.d.ts +10 -0
  433. package/esm/constants/log10e.d.ts.map +1 -0
  434. package/esm/constants/log10e.js +9 -0
  435. package/esm/constants/log10e.js.map +1 -0
  436. package/esm/constants/log2e.d.ts +10 -0
  437. package/esm/constants/log2e.d.ts.map +1 -0
  438. package/esm/constants/log2e.js +9 -0
  439. package/esm/constants/log2e.js.map +1 -0
  440. package/esm/constants/max_safe_integer.d.ts +11 -0
  441. package/esm/constants/max_safe_integer.d.ts.map +1 -0
  442. package/esm/constants/max_safe_integer.js +10 -0
  443. package/esm/constants/max_safe_integer.js.map +1 -0
  444. package/esm/constants/max_value.d.ts +10 -0
  445. package/esm/constants/max_value.d.ts.map +1 -0
  446. package/esm/constants/max_value.js +9 -0
  447. package/esm/constants/max_value.js.map +1 -0
  448. package/esm/constants/min_safe_integer.d.ts +12 -0
  449. package/esm/constants/min_safe_integer.d.ts.map +1 -0
  450. package/esm/constants/min_safe_integer.js +11 -0
  451. package/esm/constants/min_safe_integer.js.map +1 -0
  452. package/esm/constants/min_value.d.ts +10 -0
  453. package/esm/constants/min_value.d.ts.map +1 -0
  454. package/esm/constants/min_value.js +9 -0
  455. package/esm/constants/min_value.js.map +1 -0
  456. package/esm/constants/nan.d.ts +47 -0
  457. package/esm/constants/nan.d.ts.map +1 -0
  458. package/esm/constants/nan.js +27 -0
  459. package/esm/constants/nan.js.map +1 -0
  460. package/esm/constants/negative_infinity.d.ts +28 -0
  461. package/esm/constants/negative_infinity.d.ts.map +1 -0
  462. package/esm/constants/negative_infinity.js +12 -0
  463. package/esm/constants/negative_infinity.js.map +1 -0
  464. package/esm/constants/negative_zero.d.ts +31 -0
  465. package/esm/constants/negative_zero.d.ts.map +1 -0
  466. package/esm/constants/negative_zero.js +18 -0
  467. package/esm/constants/negative_zero.js.map +1 -0
  468. package/esm/constants/pi.d.ts +10 -0
  469. package/esm/constants/pi.d.ts.map +1 -0
  470. package/esm/constants/pi.js +9 -0
  471. package/esm/constants/pi.js.map +1 -0
  472. package/esm/constants/positive_infinity.d.ts +29 -0
  473. package/esm/constants/positive_infinity.d.ts.map +1 -0
  474. package/esm/constants/positive_infinity.js +13 -0
  475. package/esm/constants/positive_infinity.js.map +1 -0
  476. package/esm/constants/positive_zero.d.ts +38 -0
  477. package/esm/constants/positive_zero.d.ts.map +1 -0
  478. package/esm/constants/positive_zero.js +33 -0
  479. package/esm/constants/positive_zero.js.map +1 -0
  480. package/esm/constants/sqrt1_2.d.ts +9 -0
  481. package/esm/constants/sqrt1_2.d.ts.map +1 -0
  482. package/esm/constants/sqrt1_2.js +8 -0
  483. package/esm/constants/sqrt1_2.js.map +1 -0
  484. package/esm/constants/sqrt2.d.ts +9 -0
  485. package/esm/constants/sqrt2.d.ts.map +1 -0
  486. package/esm/constants/sqrt2.js +8 -0
  487. package/esm/constants/sqrt2.js.map +1 -0
  488. package/esm/cos.d.ts +10 -0
  489. package/esm/cos.d.ts.map +1 -0
  490. package/esm/cos.js +29 -0
  491. package/esm/cos.js.map +1 -0
  492. package/esm/cosh.d.ts +10 -0
  493. package/esm/cosh.d.ts.map +1 -0
  494. package/esm/cosh.js +18 -0
  495. package/esm/cosh.js.map +1 -0
  496. package/esm/exp.d.ts +20 -0
  497. package/esm/exp.d.ts.map +1 -0
  498. package/esm/exp.js +45 -0
  499. package/esm/exp.js.map +1 -0
  500. package/esm/expm1.d.ts +11 -0
  501. package/esm/expm1.d.ts.map +1 -0
  502. package/esm/expm1.js +35 -0
  503. package/esm/expm1.js.map +1 -0
  504. package/esm/f16round.d.ts +24 -0
  505. package/esm/f16round.d.ts.map +1 -0
  506. package/esm/f16round.js +39 -0
  507. package/esm/f16round.js.map +1 -0
  508. package/esm/float16/constants.d.ts +97 -0
  509. package/esm/float16/constants.d.ts.map +1 -0
  510. package/esm/float16/constants.js +96 -0
  511. package/esm/float16/constants.js.map +1 -0
  512. package/esm/float16/decode.d.ts +40 -0
  513. package/esm/float16/decode.d.ts.map +1 -0
  514. package/esm/float16/decode.js +61 -0
  515. package/esm/float16/decode.js.map +1 -0
  516. package/esm/float16/encode.d.ts +67 -0
  517. package/esm/float16/encode.d.ts.map +1 -0
  518. package/esm/float16/encode.js +71 -0
  519. package/esm/float16/encode.js.map +1 -0
  520. package/esm/float16/guards.d.ts +22 -0
  521. package/esm/float16/guards.d.ts.map +1 -0
  522. package/esm/float16/guards.js +12 -0
  523. package/esm/float16/guards.js.map +1 -0
  524. package/esm/float16/index.d.ts +11 -0
  525. package/esm/float16/index.d.ts.map +1 -0
  526. package/esm/float16/index.js +11 -0
  527. package/esm/float16/index.js.map +1 -0
  528. package/esm/float16/round.d.ts +25 -0
  529. package/esm/float16/round.d.ts.map +1 -0
  530. package/esm/float16/round.js +43 -0
  531. package/esm/float16/round.js.map +1 -0
  532. package/esm/float32/constants.d.ts +96 -0
  533. package/esm/float32/constants.d.ts.map +1 -0
  534. package/esm/float32/constants.js +95 -0
  535. package/esm/float32/constants.js.map +1 -0
  536. package/esm/float32/decode.d.ts +38 -0
  537. package/esm/float32/decode.d.ts.map +1 -0
  538. package/esm/float32/decode.js +64 -0
  539. package/esm/float32/decode.js.map +1 -0
  540. package/esm/float32/encode.d.ts +50 -0
  541. package/esm/float32/encode.d.ts.map +1 -0
  542. package/esm/float32/encode.js +71 -0
  543. package/esm/float32/encode.js.map +1 -0
  544. package/esm/float32/guards.d.ts +37 -0
  545. package/esm/float32/guards.d.ts.map +1 -0
  546. package/esm/float32/guards.js +16 -0
  547. package/esm/float32/guards.js.map +1 -0
  548. package/esm/float32/index.d.ts +11 -0
  549. package/esm/float32/index.d.ts.map +1 -0
  550. package/esm/float32/index.js +11 -0
  551. package/esm/float32/index.js.map +1 -0
  552. package/esm/float32/round.d.ts +23 -0
  553. package/esm/float32/round.d.ts.map +1 -0
  554. package/esm/float32/round.js +33 -0
  555. package/esm/float32/round.js.map +1 -0
  556. package/esm/floor.d.ts +10 -0
  557. package/esm/floor.d.ts.map +1 -0
  558. package/esm/floor.js +29 -0
  559. package/esm/floor.js.map +1 -0
  560. package/esm/fround.d.ts +23 -0
  561. package/esm/fround.d.ts.map +1 -0
  562. package/esm/fround.js +32 -0
  563. package/esm/fround.js.map +1 -0
  564. package/esm/guards/finite.d.ts +23 -0
  565. package/esm/guards/finite.d.ts.map +1 -0
  566. package/esm/guards/finite.js +18 -0
  567. package/esm/guards/finite.js.map +1 -0
  568. package/esm/guards/index.d.ts +50 -0
  569. package/esm/guards/index.d.ts.map +1 -0
  570. package/esm/guards/index.js +50 -0
  571. package/esm/guards/index.js.map +1 -0
  572. package/esm/guards/infinity.d.ts +3 -0
  573. package/esm/guards/infinity.d.ts.map +1 -0
  574. package/esm/guards/infinity.js +3 -0
  575. package/esm/guards/infinity.js.map +1 -0
  576. package/esm/guards/integer.d.ts +47 -0
  577. package/esm/guards/integer.d.ts.map +1 -0
  578. package/esm/guards/integer.js +19 -0
  579. package/esm/guards/integer.js.map +1 -0
  580. package/esm/guards/nan.d.ts +61 -0
  581. package/esm/guards/nan.d.ts.map +1 -0
  582. package/esm/guards/nan.js +63 -0
  583. package/esm/guards/nan.js.map +1 -0
  584. package/esm/guards/negative_infinity.d.ts +19 -0
  585. package/esm/guards/negative_infinity.d.ts.map +1 -0
  586. package/esm/guards/negative_infinity.js +21 -0
  587. package/esm/guards/negative_infinity.js.map +1 -0
  588. package/esm/guards/negative_zero.d.ts +12 -0
  589. package/esm/guards/negative_zero.d.ts.map +1 -0
  590. package/esm/guards/negative_zero.js +20 -0
  591. package/esm/guards/negative_zero.js.map +1 -0
  592. package/esm/guards/positive_infinity.d.ts +19 -0
  593. package/esm/guards/positive_infinity.d.ts.map +1 -0
  594. package/esm/guards/positive_infinity.js +21 -0
  595. package/esm/guards/positive_infinity.js.map +1 -0
  596. package/esm/guards/positive_zero.d.ts +17 -0
  597. package/esm/guards/positive_zero.d.ts.map +1 -0
  598. package/esm/guards/positive_zero.js +19 -0
  599. package/esm/guards/positive_zero.js.map +1 -0
  600. package/esm/guards/safe_integer.d.ts +33 -0
  601. package/esm/guards/safe_integer.d.ts.map +1 -0
  602. package/esm/guards/safe_integer.js +22 -0
  603. package/esm/guards/safe_integer.js.map +1 -0
  604. package/esm/hypot.d.ts +18 -0
  605. package/esm/hypot.d.ts.map +1 -0
  606. package/esm/hypot.js +60 -0
  607. package/esm/hypot.js.map +1 -0
  608. package/esm/ieee754.d.ts +16 -0
  609. package/esm/ieee754.d.ts.map +1 -0
  610. package/esm/ieee754.js +16 -0
  611. package/esm/ieee754.js.map +1 -0
  612. package/esm/imul.d.ts +17 -0
  613. package/esm/imul.d.ts.map +1 -0
  614. package/esm/imul.js +21 -0
  615. package/esm/imul.js.map +1 -0
  616. package/esm/index.d.ts +84 -0
  617. package/esm/index.d.ts.map +1 -0
  618. package/esm/index.js +84 -0
  619. package/esm/index.js.map +1 -0
  620. package/esm/internal/ieee754.d.ts +174 -0
  621. package/esm/internal/ieee754.d.ts.map +1 -0
  622. package/esm/internal/ieee754.js +194 -0
  623. package/esm/internal/ieee754.js.map +1 -0
  624. package/esm/internal/primordials.d.ts +30 -0
  625. package/esm/internal/primordials.d.ts.map +1 -0
  626. package/esm/internal/primordials.js +27 -0
  627. package/esm/internal/primordials.js.map +1 -0
  628. package/esm/log.d.ts +9 -0
  629. package/esm/log.d.ts.map +1 -0
  630. package/esm/log.js +43 -0
  631. package/esm/log.js.map +1 -0
  632. package/esm/log10.d.ts +9 -0
  633. package/esm/log10.d.ts.map +1 -0
  634. package/esm/log10.js +18 -0
  635. package/esm/log10.js.map +1 -0
  636. package/esm/log1p.d.ts +10 -0
  637. package/esm/log1p.d.ts.map +1 -0
  638. package/esm/log1p.js +29 -0
  639. package/esm/log1p.js.map +1 -0
  640. package/esm/log2.d.ts +12 -0
  641. package/esm/log2.d.ts.map +1 -0
  642. package/esm/log2.js +21 -0
  643. package/esm/log2.js.map +1 -0
  644. package/esm/max.d.ts +22 -0
  645. package/esm/max.d.ts.map +1 -0
  646. package/esm/max.js +48 -0
  647. package/esm/max.js.map +1 -0
  648. package/esm/min.d.ts +10 -0
  649. package/esm/min.d.ts.map +1 -0
  650. package/esm/min.js +33 -0
  651. package/esm/min.js.map +1 -0
  652. package/esm/package.json +3 -0
  653. package/esm/pow.d.ts +31 -0
  654. package/esm/pow.d.ts.map +1 -0
  655. package/esm/pow.js +33 -0
  656. package/esm/pow.js.map +1 -0
  657. package/esm/random.d.ts +93 -0
  658. package/esm/random.d.ts.map +1 -0
  659. package/esm/random.js +237 -0
  660. package/esm/random.js.map +1 -0
  661. package/esm/round.d.ts +9 -0
  662. package/esm/round.d.ts.map +1 -0
  663. package/esm/round.js +21 -0
  664. package/esm/round.js.map +1 -0
  665. package/esm/sign.d.ts +17 -0
  666. package/esm/sign.d.ts.map +1 -0
  667. package/esm/sign.js +19 -0
  668. package/esm/sign.js.map +1 -0
  669. package/esm/sin.d.ts +14 -0
  670. package/esm/sin.d.ts.map +1 -0
  671. package/esm/sin.js +28 -0
  672. package/esm/sin.js.map +1 -0
  673. package/esm/sinh.d.ts +14 -0
  674. package/esm/sinh.d.ts.map +1 -0
  675. package/esm/sinh.js +19 -0
  676. package/esm/sinh.js.map +1 -0
  677. package/esm/sqrt.d.ts +19 -0
  678. package/esm/sqrt.d.ts.map +1 -0
  679. package/esm/sqrt.js +42 -0
  680. package/esm/sqrt.js.map +1 -0
  681. package/esm/tan.d.ts +9 -0
  682. package/esm/tan.d.ts.map +1 -0
  683. package/esm/tan.js +23 -0
  684. package/esm/tan.js.map +1 -0
  685. package/esm/tanh.d.ts +17 -0
  686. package/esm/tanh.d.ts.map +1 -0
  687. package/esm/tanh.js +31 -0
  688. package/esm/tanh.js.map +1 -0
  689. package/esm/trunc.d.ts +21 -0
  690. package/esm/trunc.d.ts.map +1 -0
  691. package/esm/trunc.js +47 -0
  692. package/esm/trunc.js.map +1 -0
  693. package/esm/types/finite.d.ts +16 -0
  694. package/esm/types/finite.d.ts.map +1 -0
  695. package/esm/types/finite.js +3 -0
  696. package/esm/types/finite.js.map +1 -0
  697. package/esm/types/float.d.ts +65 -0
  698. package/esm/types/float.d.ts.map +1 -0
  699. package/esm/types/float.js +3 -0
  700. package/esm/types/float.js.map +1 -0
  701. package/esm/types/index.d.ts +6 -0
  702. package/esm/types/index.d.ts.map +1 -0
  703. package/esm/types/index.js +6 -0
  704. package/esm/types/index.js.map +1 -0
  705. package/esm/types/integer.d.ts +147 -0
  706. package/esm/types/integer.d.ts.map +1 -0
  707. package/esm/types/integer.js +4 -0
  708. package/esm/types/integer.js.map +1 -0
  709. package/esm/types/precision.d.ts +46 -0
  710. package/esm/types/precision.d.ts.map +1 -0
  711. package/esm/types/precision.js +8 -0
  712. package/esm/types/precision.js.map +1 -0
  713. package/esm/types/safe_integer.d.ts +17 -0
  714. package/esm/types/safe_integer.d.ts.map +1 -0
  715. package/esm/types/safe_integer.js +4 -0
  716. package/esm/types/safe_integer.js.map +1 -0
  717. package/package.json +1834 -0
  718. package/src/abs.ts +18 -0
  719. package/src/acos.ts +24 -0
  720. package/src/acosh.ts +28 -0
  721. package/src/asin.ts +24 -0
  722. package/src/asinh.ts +21 -0
  723. package/src/atan.ts +64 -0
  724. package/src/atan2.ts +58 -0
  725. package/src/atanh.ts +26 -0
  726. package/src/cbrt.ts +22 -0
  727. package/src/ceil.ts +27 -0
  728. package/src/clamp.ts +29 -0
  729. package/src/clz32.ts +45 -0
  730. package/src/constants/e.ts +18 -0
  731. package/src/constants/epsilon.ts +25 -0
  732. package/src/constants/index.ts +22 -0
  733. package/src/constants/infinity.ts +2 -0
  734. package/src/constants/ln10.ts +9 -0
  735. package/src/constants/ln2.ts +9 -0
  736. package/src/constants/log10e.ts +9 -0
  737. package/src/constants/log2e.ts +9 -0
  738. package/src/constants/max_safe_integer.ts +10 -0
  739. package/src/constants/max_value.ts +9 -0
  740. package/src/constants/min_safe_integer.ts +11 -0
  741. package/src/constants/min_value.ts +9 -0
  742. package/src/constants/nan.ts +57 -0
  743. package/src/constants/negative_infinity.ts +28 -0
  744. package/src/constants/negative_zero.ts +34 -0
  745. package/src/constants/pi.ts +9 -0
  746. package/src/constants/positive_infinity.ts +30 -0
  747. package/src/constants/positive_zero.ts +41 -0
  748. package/src/constants/sqrt1_2.ts +8 -0
  749. package/src/constants/sqrt2.ts +8 -0
  750. package/src/cos.ts +29 -0
  751. package/src/cosh.ts +18 -0
  752. package/src/exp.ts +45 -0
  753. package/src/expm1.ts +31 -0
  754. package/src/f16round.ts +39 -0
  755. package/src/float16/constants.ts +106 -0
  756. package/src/float16/decode.ts +61 -0
  757. package/src/float16/encode.ts +72 -0
  758. package/src/float16/guards.ts +33 -0
  759. package/src/float16/index.ts +10 -0
  760. package/src/float16/round.ts +43 -0
  761. package/src/float32/constants.ts +105 -0
  762. package/src/float32/decode.ts +64 -0
  763. package/src/float32/encode.ts +71 -0
  764. package/src/float32/guards.ts +54 -0
  765. package/src/float32/index.ts +10 -0
  766. package/src/float32/round.ts +33 -0
  767. package/src/floor.ts +26 -0
  768. package/src/fround.ts +32 -0
  769. package/src/guards/finite.ts +45 -0
  770. package/src/guards/index.ts +49 -0
  771. package/src/guards/infinity.ts +2 -0
  772. package/src/guards/integer.ts +62 -0
  773. package/src/guards/nan.ts +65 -0
  774. package/src/guards/negative_infinity.ts +22 -0
  775. package/src/guards/negative_zero.ts +21 -0
  776. package/src/guards/positive_infinity.ts +22 -0
  777. package/src/guards/positive_zero.ts +19 -0
  778. package/src/guards/safe_integer.ts +56 -0
  779. package/src/hypot.ts +59 -0
  780. package/src/ieee754.ts +15 -0
  781. package/src/imul.ts +21 -0
  782. package/src/index.ts +84 -0
  783. package/src/internal/ieee754.ts +255 -0
  784. package/src/internal/primordials.ts +33 -0
  785. package/src/log.ts +42 -0
  786. package/src/log10.ts +18 -0
  787. package/src/log1p.ts +26 -0
  788. package/src/log2.ts +21 -0
  789. package/src/max.ts +46 -0
  790. package/src/min.ts +32 -0
  791. package/src/pow.ts +33 -0
  792. package/src/random.ts +241 -0
  793. package/src/round.ts +20 -0
  794. package/src/sign.ts +19 -0
  795. package/src/sin.ts +29 -0
  796. package/src/sinh.ts +19 -0
  797. package/src/sqrt.ts +40 -0
  798. package/src/tan.ts +22 -0
  799. package/src/tanh.ts +28 -0
  800. package/src/trunc.ts +44 -0
  801. package/src/types/finite.ts +23 -0
  802. package/src/types/float.ts +74 -0
  803. package/src/types/index.ts +5 -0
  804. package/src/types/integer.ts +167 -0
  805. package/src/types/precision.ts +51 -0
  806. package/src/types/safe_integer.ts +18 -0
package/src/max.ts ADDED
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Returns the largest of its arguments, or `NaN` if any argument is `NaN`.
3
+ * If no arguments are provided, the result is `-Infinity`.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { max } from "@nick/math";
8
+ *
9
+ * const atLeastZero = (x: number) => max(x, 0);
10
+ *
11
+ * atLeastZero(+1); // 1
12
+ * atLeastZero(-1); // 0
13
+ * ```
14
+ * @module max
15
+ */
16
+ import { NEGATIVE_INFINITY } from "./constants/negative_infinity.js";
17
+
18
+ /**
19
+ * Returns the largest of its arguments, or `NaN` if any argument is `NaN`.
20
+ * If no arguments are provided, the result is `-Infinity`.
21
+ *
22
+ * This function is designed as a fast alternative to the built-in `Math.max`
23
+ * function. It is optimized for performance, and isn't susceptible to any
24
+ * global state changes or monkey-patching that might affect the built-in
25
+ * `Math.max` function.
26
+ *
27
+ * @param numbers The numbers to compare.
28
+ * @returns The largest number in the list.
29
+ * @category Comparison
30
+ * @example
31
+ * ```ts
32
+ * import { max } from "@nick/math";
33
+ *
34
+ * const largest = max(1, 2); // 2
35
+ * const alsoLargest = max(-1, 0); // 0
36
+ * ```
37
+ */
38
+ export function max(...numbers: number[]): number {
39
+ let result = NEGATIVE_INFINITY as number;
40
+ for (let i = 0; i < numbers.length; i++) {
41
+ const number = numbers[i];
42
+ if (number !== number) return number;
43
+ if (number > result) result = number;
44
+ }
45
+ return result;
46
+ }
package/src/min.ts ADDED
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Returns the smallest of its arguments, or `NaN` if any argument is `NaN`.
3
+ * If no arguments are provided, the result is `Infinity`.
4
+ *
5
+ * @module min
6
+ */
7
+ import { POSITIVE_INFINITY } from "./constants/positive_infinity.js";
8
+ import { isNegativeZero } from "./guards/negative_zero.js";
9
+
10
+ /**
11
+ * Returns the smallest of its arguments, or `NaN` if any argument is `NaN`.
12
+ * If no arguments are provided, the result is `Infinity`.
13
+ *
14
+ * @param numbers The numbers to compare.
15
+ * @returns The smallest number in the list.
16
+ * @category Comparison
17
+ */
18
+ export function min(...numbers: number[]): number {
19
+ let result = POSITIVE_INFINITY as number;
20
+ for (let i = 0; i < numbers.length; i++) {
21
+ const number = numbers[i];
22
+ if (number !== number) return number;
23
+ if (number < result) {
24
+ result = number;
25
+ continue;
26
+ }
27
+ if (number === 0 && result === 0 && isNegativeZero(number)) {
28
+ result = number;
29
+ }
30
+ }
31
+ return result;
32
+ }
package/src/pow.ts ADDED
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Calculates the base number raised to the power of the exponent.
3
+ *
4
+ * @module pow
5
+ */
6
+
7
+ /**
8
+ * Calculates the base number raised to the power of the exponent.
9
+ *
10
+ * **Note**: the `**` operator is equivalent to the `^` operator in standard
11
+ * mathematical notation, and is used to raise a number to a power. For those
12
+ * unfamiliar with its syntax: `x ** y` is the same as `x^y`.
13
+ *
14
+ * @param x The base number to raise to the power of `y`
15
+ * @param y The exponent to raise the base number by
16
+ * @returns The base number raised to the power of the exponent.
17
+ * @category Exponentiation
18
+ * @example
19
+ * ```ts
20
+ * import { pow } from "@nick/math";
21
+ *
22
+ * const MAX_SAFE_INTEGER = pow(2, 53) - 1;
23
+ *
24
+ * const foursquared = pow(4, 2); // 16
25
+ *
26
+ * const infinity = pow(1, 309); // Infinity
27
+ *
28
+ * const almost_infinity = pow(1, 308); // 1.7976931348623157e+308
29
+ * ```
30
+ */
31
+ export function pow(x: number, y: number): number {
32
+ return x ** y;
33
+ }
package/src/random.ts ADDED
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Generates a pseudo-random number in the range `[0, 1)`.
3
+ *
4
+ * **Important**: This function is not cryptographically secure. Do not use it
5
+ * for security-sensitive applications.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { random } from "@nick/math/random";
10
+ *
11
+ * console.log(random());
12
+ * // => 0.5390711768976619
13
+ * ```
14
+ * @module random
15
+ */
16
+ import { ArrayFrom, DateNow } from "./internal/primordials.js";
17
+
18
+ /** Period parameters */
19
+ const N = 624;
20
+ /** The number of 32 bit words */
21
+ const M = 397;
22
+ /** Constant Vector A */
23
+ const MATRIX_A = 0x9908b0df;
24
+ /** Most significant W-R bits */
25
+ const UPPER_MASK = 0x80000000;
26
+ /** Least significant R bits */
27
+ const LOWER_MASK = 0x7fffffff;
28
+ /** UPPER_MASK + LOWER_MASK + 1 */
29
+ const TOTAL_MASK = 0x100000000;
30
+
31
+ /**
32
+ * Mersenne Twister implementation in TypeScript.
33
+ *
34
+ * Based on the original C-code by Makoto Matsumoto and Takuji Nishimura.
35
+ *
36
+ * @remarks
37
+ * This implementation is a simplified version of the original API, providing
38
+ * only a `random()` and `randomInt()` method for generating pseudo-random
39
+ * numbers, and a `init()` method for seeding the generator.
40
+ *
41
+ * Benchmarks show this API to be ever-so-slightly slower than the native
42
+ * `Math.random` function, while still performing well within an acceptable
43
+ * timing window. Since this is a pure-JS implementation, achieving speeds on
44
+ * the same level as a native API is simply not possible.
45
+ * @example
46
+ * ```ts
47
+ * import { MT19937 } from "@nick/math/random";
48
+ *
49
+ * const mt = new MT19937();
50
+ * const n = mt.random(); // e.g. 0.9507143115624784
51
+ * ```
52
+ * @example
53
+ * ```ts
54
+ * import { MT19937 } from "@nick/math/random";
55
+ *
56
+ * const mt = new MT19937(42);
57
+ * console.log(mt.random()); // 0.37454011430963874
58
+ * ```
59
+ *
60
+ * @see http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html for the
61
+ * original C code this is based on and more information on Mersenne Twister.
62
+ */
63
+ export class MT19937 {
64
+ static readonly #instance = new MT19937();
65
+
66
+ /**
67
+ * Initialize the singleton instance with a seed.
68
+ *
69
+ * @param seed - The seed value.
70
+ * @returns The singleton instance.
71
+ */
72
+ static init(...seed: number[]): MT19937 {
73
+ if (seed.length > 1) {
74
+ return MT19937.#instance.initFromArray(...seed);
75
+ } else {
76
+ return MT19937.#instance.init(seed[0]);
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Generates a random number on [0, 1)-real-interval.
82
+ * @returns A floating-point number between 0 and 1.
83
+ */
84
+ static random(): number {
85
+ return MT19937.#instance.random();
86
+ }
87
+
88
+ /**
89
+ * Generates a random number on [0, 0xffffffff]-interval.
90
+ * @returns A 32-bit unsigned integer.
91
+ */
92
+ static randomInt(): number {
93
+ return MT19937.#instance.randomInt();
94
+ }
95
+
96
+ /** the array for the state vector */
97
+ #mt = ArrayFrom({ length: N }, () => 0);
98
+
99
+ /** mti == N + 1 means mt[N] is not initialized */
100
+ #mti = N + 1;
101
+
102
+ /**
103
+ * Initializes a new instance of the MersenneTwister class.
104
+ * @param seed - The seed value.
105
+ */
106
+ constructor(seed?: number) {
107
+ this.init(seed);
108
+ }
109
+
110
+ /**
111
+ * Initializes mt[N] with a seed.
112
+ * @param seed - The seed value.
113
+ */
114
+ init(seed?: number): this {
115
+ seed ??= DateNow();
116
+ this.#mt[0] = seed >>> 0;
117
+ const mt = this.#mt;
118
+ const x = 1812433253, y = 0xffff0000, z = 0x0000ffff;
119
+ for (let i = 1; i < N; i++) {
120
+ const s = mt[i - 1] ^ (mt[i - 1] >>> 30);
121
+ const l = (((s & y) >>> 16) * x) << 16;
122
+ const r = (s & z) * x;
123
+ mt[this.#mti = i] = (l + r + i) >>> 0;
124
+ }
125
+ this.#mti = N;
126
+ return this;
127
+ }
128
+
129
+ /**
130
+ * Initialize by an array with array-length.
131
+ * @param seeds - The array for initializing keys.
132
+ */
133
+ initFromArray(...seeds: number[]): this {
134
+ let i = 1, j = 0;
135
+ const len = seeds.length;
136
+ this.init(19650218);
137
+ let k = N > len ? N : len;
138
+ const w = 1566083941;
139
+ const x = 1664525, y = 0xffff0000, z = 0x0000ffff;
140
+ for (; k > 0; k--) {
141
+ const s = this.#mt[i - 1] ^ (this.#mt[i - 1] >>> 30);
142
+ const u = (s & z) * x;
143
+ let t = ((s & y) >>> 16) * x << 16;
144
+ this.#mt[i] = (t = this.#mt[i] ^ t + u, t += seeds[j] + j, t >>> 0);
145
+ i++, j++;
146
+ if (i >= N) {
147
+ this.#mt[0] = this.#mt[N - 1];
148
+ i = 1;
149
+ }
150
+ if (j >= len) j = 0;
151
+ }
152
+ for (k = N - 1; k > 0; k--) {
153
+ const s = this.#mt[i - 1] ^ (this.#mt[i - 1] >>> 30);
154
+ let t = this.#mt[i];
155
+ t ^= (((s & y) >>> 16) * w << 16) + (s & z) * w;
156
+ this.#mt[i] = (t - i) >>> 0;
157
+ i++;
158
+ if (i >= N) {
159
+ this.#mt[0] = this.#mt[N - 1];
160
+ i = 1;
161
+ }
162
+ }
163
+ /* MSB is 1; assuring non-zero initial array */
164
+ this.#mt[0] = 0x80000000;
165
+ return this;
166
+ }
167
+
168
+ /**
169
+ * Generates a random number on [0, 0xffffffff]-interval.
170
+ * @returns A 32-bit unsigned integer.
171
+ */
172
+ randomInt(): number {
173
+ let y: number;
174
+ const mag01 = [0x0, MATRIX_A];
175
+
176
+ if (this.#mti >= N) {
177
+ let kk: number;
178
+
179
+ /* a default initial seed is used */
180
+ if (this.#mti === N + 1) this.init(5489);
181
+
182
+ for (kk = 0; kk < N - M; kk++) {
183
+ y = (this.#mt[kk] & UPPER_MASK) | (this.#mt[kk + 1] & LOWER_MASK);
184
+ this.#mt[kk] = this.#mt[kk + M] ^ (y >>> 1) ^ mag01[y & 0x1];
185
+ }
186
+
187
+ for (; kk < N - 1; kk++) {
188
+ y = (this.#mt[kk] & UPPER_MASK) | (this.#mt[kk + 1] & LOWER_MASK);
189
+ this.#mt[kk] = this.#mt[kk + (M - N)] ^ (y >>> 1) ^ mag01[y & 0x1];
190
+ }
191
+
192
+ y = (this.#mt[N - 1] & UPPER_MASK) | (this.#mt[0] & LOWER_MASK);
193
+ this.#mt[N - 1] = this.#mt[M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];
194
+ this.#mti = 0;
195
+ }
196
+
197
+ y = this.#mt[this.#mti++];
198
+
199
+ // Tempering
200
+ y ^= y >>> 11;
201
+ y ^= (y << 7) & 0x9d2c5680;
202
+ y ^= (y << 15) & 0xefc60000;
203
+ y ^= y >>> 18;
204
+
205
+ return y >>> 0;
206
+ }
207
+
208
+ /**
209
+ * Generates a random number on [0, 1)-real-interval.
210
+ * @returns A floating-point number between 0 and 1.
211
+ */
212
+ random(): number {
213
+ return this.randomInt() / TOTAL_MASK;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Generates a pseudo-random number in the range `[0, 1)`. This function is not
219
+ * cryptographically secure, and should not be used for any security-sensitive
220
+ * applications. It was designed to be a drop-in replacement for the native
221
+ * `Math.random()` function, with support for seeding the generator.
222
+ *
223
+ * @returns A pseudo-random number in the range `[0, 1)`.
224
+ * @category Random
225
+ * @see {@linkcode random.init} for seeding the generator.
226
+ * @see {@linkcode MT19937} for the Mersenne-Twister implementation this uses.
227
+ */
228
+ export function random(): number {
229
+ return MT19937.random();
230
+ }
231
+
232
+ /**
233
+ * Initializes the random number generator with a seed or sequence of seeds.
234
+ *
235
+ * This is useful for testing, allowing you to generate a deterministic
236
+ * sequence of pseudo-random numbers based on the provided seed value.
237
+ *
238
+ * @param seed - The seed value or sequence of seed values.
239
+ * @returns The singleton instance of the random number generator.
240
+ */
241
+ random.init = MT19937.init;
package/src/round.ts ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Rounds a number to the nearest whole number.
3
+ *
4
+ * @module round
5
+ */
6
+ import { floor } from "./floor.js";
7
+
8
+ /**
9
+ * Rounds a number to the nearest whole number.
10
+ *
11
+ * @param x The number to round to the nearest whole number
12
+ * @returns The nearest whole number to the provided number.
13
+ * @category Rounding
14
+ */
15
+ export function round(x: number): number {
16
+ x = +x;
17
+ if (x !== x || x === 0) return x;
18
+ const rounded = floor(x + 0.5);
19
+ return rounded === 0 && x < 0 ? -0 : rounded;
20
+ }
package/src/sign.ts ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Returns the sign of a number, indicating whether the number is positive,
3
+ * negative, or zero.
4
+ *
5
+ * @module sign
6
+ */
7
+
8
+ /**
9
+ * Returns the sign of a number, indicating whether the number is positive,
10
+ * negative, or zero. This preserves the sign of `-0`, and returns `NaN` as-is.
11
+ *
12
+ * @param x The number to return the sign of
13
+ * @returns `1` if `x` is positive, `-1` if it is negative, and `0` if it is
14
+ * zero. This preserves the sign of `-0`, and returns `NaN` as-is.
15
+ * @category Arithmetic
16
+ */
17
+ export function sign(x: number): number {
18
+ return x < 0 ? -1 : x > 0 ? 1 : x;
19
+ }
package/src/sin.ts ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Calculates the sine of a number, returning a value in the range `[-1, 1]`.
3
+ *
4
+ * @module sin
5
+ */
6
+
7
+ import { abs } from "./abs.js";
8
+ import { EPSILON } from "./constants/epsilon.js";
9
+ import { NAN } from "./constants/nan.js";
10
+ import { isFinite } from "./guards/finite.js";
11
+
12
+ /**
13
+ * Calculates the sine of a number, returning a value in the range `[-1, 1]`.
14
+ *
15
+ * @param x The angle in radians whose sine is to be calculated.
16
+ * @returns The sine of the provided angle.
17
+ * @category Trigonometry
18
+ */
19
+ export function sin(x: number): number {
20
+ if (!isFinite(x)) return NAN;
21
+
22
+ let sum = (x = +x), term = x, n = 1;
23
+ while (abs(term) > EPSILON) {
24
+ n += 2;
25
+ term *= -x * x / (n * (n - 1));
26
+ sum += term;
27
+ }
28
+ return sum;
29
+ }
package/src/sinh.ts ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Calculates the hyperbolic sine of a number.
3
+ *
4
+ * @module sinh
5
+ */
6
+
7
+ import { exp } from "./exp.js";
8
+
9
+ /**
10
+ * Calculates the hyperbolic sine of a number.
11
+ *
12
+ * @param x The number whose hyperbolic sine is to be calculated.
13
+ * @returns The hyperbolic sine of the provided number.
14
+ * @category Trigonometry
15
+ */
16
+ export function sinh(x: number): number {
17
+ if (x === 0) return x;
18
+ return (exp(x) - exp(-x)) / 2;
19
+ }
package/src/sqrt.ts ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Calculates the square root of a number.
3
+ *
4
+ * @module sqrt
5
+ */
6
+ import { EPSILON } from "./constants/epsilon.js";
7
+ import { NAN } from "./constants/nan.js";
8
+ import { POSITIVE_INFINITY } from "./constants/positive_infinity.js";
9
+ import { abs } from "./abs.js";
10
+
11
+ /**
12
+ * Calculates the square root of a number.
13
+ *
14
+ * @param x The number to calculate the square root of
15
+ * @returns The square root of the provided number.
16
+ * @example
17
+ * ```ts
18
+ * import * as math from "@nick/math";
19
+ *
20
+ * math.sqrt(4); // 2
21
+ * math.sqrt(16); // 4
22
+ * math.sqrt(0); // 0
23
+ * math.sqrt(1); // 1
24
+ * math.sqrt(-1); // NaN
25
+ * math.sqrt(-4); // NaN
26
+ * ```
27
+ */
28
+ export function sqrt(x: number): number {
29
+ if (x < 0) return NAN; // negative numbers have no real square root
30
+ if (x === 0 || x === 1) return x; // sqrt(0) = 0, sqrt(1) = 1
31
+ if (x === POSITIVE_INFINITY) return x;
32
+
33
+ // use Newton's method to approximate the square root
34
+ let z = x / 2, prev;
35
+ do {
36
+ prev = z;
37
+ z = (z + x / z) / 2;
38
+ } while (abs(z - prev) > EPSILON);
39
+ return z;
40
+ }
package/src/tan.ts ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Calculates the tangent of `x`, returning a value in the range `[-∞, +∞]`.
3
+ *
4
+ * @category Trigonometry
5
+ * @module tan
6
+ */
7
+ import { NAN } from "./constants/nan.js";
8
+ import { isFinite } from "./guards/finite.js";
9
+ import { cos } from "./cos.js";
10
+ import { sin } from "./sin.js";
11
+
12
+ /**
13
+ * Calculates the tangent of a number, returning a value in range `[-∞, +∞]`.
14
+ *
15
+ * @param x The angle in radians whose tangent is to be calculated.
16
+ * @returns The tangent of the provided angle.
17
+ * @category Trigonometry
18
+ */
19
+ export function tan(x: number): number {
20
+ if (!isFinite(x)) return NAN;
21
+ return sin(x) / cos(x);
22
+ }
package/src/tanh.ts ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Calculates the hyperbolic tangent of a number, returning a value in the
3
+ * range `[-1, 1]`.
4
+ *
5
+ * @category Trigonometry
6
+ * @module tanh
7
+ */
8
+
9
+ import { exp } from "./exp.js";
10
+ import { isNaN, NAN } from "./guards/nan.js";
11
+ import { isPositiveInfinity } from "./guards/positive_infinity.js";
12
+ import { isNegativeInfinity } from "./guards/negative_infinity.js";
13
+
14
+ /**
15
+ * Calculates the hyperbolic tangent of a number, returning a value in the
16
+ * range `[-1, 1]`.
17
+ *
18
+ * @param x The number whose hyperbolic tangent is to be calculated.
19
+ * @returns The hyperbolic tangent of the provided number.
20
+ * @category Trigonometry
21
+ */
22
+ export function tanh(x: number): number {
23
+ if (x === 0) return x;
24
+ if (isNaN(x)) return NAN;
25
+ if (isPositiveInfinity(x)) return 1;
26
+ if (isNegativeInfinity(x)) return -1;
27
+ return (exp(x) - exp(-x)) / (exp(x) + exp(-x));
28
+ }
package/src/trunc.ts ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Truncates a number to an integer, removing any fractional digits.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import * as math from "@nick/math";
7
+ *
8
+ * math.trunc(13.37); // 13
9
+ * math.trunc(42.195); // 42
10
+ * math.trunc(-7.8); // -7
11
+ * math.trunc(-0.123); // 0
12
+ * math.trunc(0); // 0
13
+ * ```
14
+ * @module trunc
15
+ */
16
+ import { ceil } from "./ceil.js";
17
+ import { floor } from "./floor.js";
18
+
19
+ /**
20
+ * Truncates a number to an integer, removing any fractional digits.
21
+ *
22
+ * This is a local implementation of the native `Math.trunc` function.
23
+ *
24
+ * @param x The number to truncate
25
+ * @returns The integer part of the provided number.
26
+ * @category Rounding
27
+ * @example
28
+ * ```ts
29
+ * import * as math from "@nick/math";
30
+ *
31
+ * math.trunc(13.37); // 13
32
+ * math.trunc(42.195); // 42
33
+ * math.trunc(-7.8); // -7
34
+ * math.trunc(-0.123); // 0
35
+ * math.trunc(0); // 0
36
+ * ```
37
+ */
38
+ export function trunc(x: number): number {
39
+ x = +x;
40
+ if (x !== x) return x;
41
+ if (x === 0) return x;
42
+ if (x > -1 && x < 0) return -0;
43
+ return x < 0 ? ceil(x) : floor(x);
44
+ }
@@ -0,0 +1,23 @@
1
+ import type {
2
+ NEGATIVE_INFINITY,
3
+ POSITIVE_INFINITY,
4
+ } from "../constants/infinity.js";
5
+ import type { NAN } from "../constants/nan.js";
6
+
7
+ const Finite: unique symbol = Symbol("Finite");
8
+
9
+ interface IsFinite {
10
+ readonly [Finite]: never;
11
+ }
12
+
13
+ /**
14
+ * Branded nominal type that represents a finite number, which is a real number
15
+ * that is not infinite or `NaN`.
16
+ *
17
+ * @category Types
18
+ * @tags number, nominal, finite
19
+ */
20
+ export type Finite<N extends number = number> = (
21
+ & Exclude<N, NAN | POSITIVE_INFINITY | NEGATIVE_INFINITY>
22
+ & IsFinite
23
+ ) extends infer U extends N ? U : never;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * This module provides nominal (branded) types for working with floating-point
3
+ * numbers of various precisions, which can be used to enforce type safety and
4
+ * prevent accidental mixing of floating-point values of different precisions.
5
+ *
6
+ * The types provided by this module are branded with unique symbols that are
7
+ * specific to floating-point numbers, and are designed to be used as generic
8
+ * type arguments to other functions and classes that work with floats.
9
+ *
10
+ * @module types/float
11
+ */
12
+ import type { FloatPrecision, P32 } from "./precision.js";
13
+
14
+ const Float: unique symbol = Symbol("Float");
15
+
16
+ interface IsFloat<N extends FloatPrecision> {
17
+ readonly [Float]: N;
18
+ }
19
+
20
+ /**
21
+ * Represents a floating-point number `N`, branded with the precision specified
22
+ * by the generic type argument `P` (default: 32).
23
+ *
24
+ * This is a branded nominal type that accepts an optional generic type
25
+ * argument. When passed a literal number, it will "brand" it with an
26
+ * unforgeable unique symbol that is specific to floating points.
27
+ *
28
+ * @template {number} [N=number] The type of numeric value to check.
29
+ * @template {FloatPrecision} [P=P32] Precision of the floating-point number.
30
+ * @category Types
31
+ * @tags Float, Branded
32
+ */
33
+ export type Float<N extends number = number, P extends FloatPrecision = P32> =
34
+ number extends N ? number & IsFloat<P>
35
+ : `${N}` extends `${bigint}` ? N extends 0 ? N & IsFloat<P> : never
36
+ : N & IsFloat<P>;
37
+
38
+ /**
39
+ * Represents floating-point numbers of 16-bit precision.
40
+ *
41
+ * This is a branded nominal type that accepts an optional generic type
42
+ * argument. When passed a literal number, it will "brand" it with an
43
+ * unforgeable unique symbol that is specific to 16-bit floating points.
44
+ *
45
+ * @category Types
46
+ * @tags Float, 16-bit, Branded
47
+ */
48
+ export type Float16<N extends number = number> = Float<N, 16>;
49
+
50
+ /**
51
+ * Represents floating-point numbers of 32-bit precision.
52
+ *
53
+ * This is a branded nominal type that accepts an optional generic type
54
+ * argument. When passed a literal number, it will "brand" it with an
55
+ * unforgeable unique symbol that is specific to 32-bit floating points.
56
+ *
57
+ * @category Types
58
+ * @tags Float, 32-bit, Branded
59
+ */
60
+ export type Float32<N extends number = number> = Float<N, 32>;
61
+
62
+ /**
63
+ * Represents floating-point numbers of 64-bit precision.
64
+ *
65
+ * This is a branded nominal type that accepts an optional generic type
66
+ * argument. When passed a literal number, it will "brand" it with an
67
+ * unforgeable unique symbol that is specific to 64-bit floating points.
68
+ *
69
+ * @category Types
70
+ * @tags Float, 64-bit, Branded
71
+ */
72
+ export type Float64<N extends number = number> = Float<N, 64>;
73
+
74
+ export type { Float64 as Double };
@@ -0,0 +1,5 @@
1
+ export * from "./finite.js";
2
+ export * from "./float.js";
3
+ export * from "./integer.js";
4
+ export * from "./precision.js";
5
+ export * from "./safe_integer.js";