@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
@@ -0,0 +1,34 @@
1
+ /**
2
+ * This module provides a constant value and a branded nominal type for the
3
+ * special number negative zero (`-0`). This is a non-standard extension of the
4
+ * native JavaScript language, provided for stronger type-safety when working
5
+ * with negative zero values.
6
+ *
7
+ * @module negative-zero
8
+ */
9
+
10
+ // deno-lint-ignore no-unused-vars
11
+ const NegativeZero: unique symbol = Symbol("-0");
12
+
13
+ interface NegativeZero {
14
+ readonly [NegativeZero]: never;
15
+ }
16
+
17
+ /**
18
+ * Represents the special number negative zero (`-0`).
19
+ *
20
+ * @category Constants
21
+ * @tags Negative Zero
22
+ */
23
+ export const NEGATIVE_ZERO: NEGATIVE_ZERO = -0 as NEGATIVE_ZERO;
24
+
25
+ /**
26
+ * @remarks
27
+ * TypeScript is not capable of distinguishing `-0` from `0` on a type level.
28
+ * This type helps fill that gap by providing a branded nominal type for it,
29
+ * allowing you to perform strict type checking and narrowing against negative
30
+ * zero values.
31
+ *
32
+ * @see {@linkcode isNegativeZero} to check runtime values against this type.
33
+ */
34
+ export type NEGATIVE_ZERO = -0 & NegativeZero;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Represents the mathematical constant `π` (pi), the ratio of a circle's
3
+ * circumference to its diameter, approximately equal to `3.141592653589793`.
4
+ *
5
+ * This is a local implementation of the native `Math.PI` constant.
6
+ * @category Constants
7
+ */
8
+ export const PI: PI = 3.141592653589793;
9
+ export type PI = 3.141592653589793;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Positive Infinity is a special value representing positive infinity, which
3
+ * is greater than any other number. It is approximately equal to
4
+ * `1.7976931348623159e+308`.
5
+ *
6
+ * This is a local implementation of the native `Number.POSITIVE_INFINITY`
7
+ * constant.
8
+ * @category Constants
9
+ * @tags Infinity
10
+ */
11
+ export const POSITIVE_INFINITY: POSITIVE_INFINITY = 1 / 0 as POSITIVE_INFINITY;
12
+
13
+ /**
14
+ * Special type used to represent `+Infinity` (positive infinity). TypeScript's
15
+ * built-in types do not distinguish between positive/negative infinity and any
16
+ * other `number`. However, its type checker _is_ capable of differentiating
17
+ * between those types and other literal numbers.
18
+ *
19
+ * This type simply (ab)uses the type system's handling of scientific notation:
20
+ * by using an arbitrary exponent in excess of `308`, the type checker can now
21
+ * recognize and represent the type as `Infinity`. Great success!
22
+ *
23
+ * NB: Credit to Sindre Sorhus and his type-fest project for this approach.
24
+ *
25
+ * @category Types
26
+ * @tags Infinity
27
+ */
28
+ export type POSITIVE_INFINITY = 1e333;
29
+
30
+ export { POSITIVE_INFINITY as Infinity };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * This module provides a constant value and a branded nominal type for the
3
+ * special number positive zero (`-0`). This is a non-standard extension of the
4
+ * native JavaScript language, provided for stronger type-safety when working
5
+ * with positive zero values.
6
+ *
7
+ * @module positive-zero
8
+ */
9
+
10
+ // deno-lint-ignore no-unused-vars
11
+ const PositiveZero: unique symbol = Symbol("0");
12
+
13
+ interface PositiveZero {
14
+ readonly [PositiveZero]: never;
15
+ }
16
+
17
+ /**
18
+ * Represents a value that has been verified at runtime to be positive zero,
19
+ * (i.e. exactly `0`, and not `-0`).
20
+ *
21
+ * This is provided as both a constant runtime value and as a branded nominal
22
+ * type alias for `0`, for use in type-level checks and narrowing where you
23
+ * need a higher level of type-safety than just a standard literal `0`.
24
+ *
25
+ * @category Constants
26
+ * @tags Positive Zero
27
+ * @example
28
+ * ```ts
29
+ * import { POSITIVE_ZERO } from "@nick/math/constants/positive-zero";
30
+ * import { isPositiveZero } from "@nick/math/is/positive-zero";
31
+ * import assert from "node:assert";
32
+ *
33
+ * assert.strictEqual(isPositiveZero(-0), false); // OK
34
+ * assert.strictEqual(isPositiveZero(POSITIVE_ZERO), true); // OK
35
+ * assert.strictEqual(POSITIVE_ZERO, 0); // OK
36
+ * ```
37
+ */
38
+ export const POSITIVE_ZERO: POSITIVE_ZERO = 0 as POSITIVE_ZERO;
39
+
40
+ /** @inheritdoc */
41
+ export type POSITIVE_ZERO = 0 & PositiveZero;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The square root of `1/2`, approximately equal to `0.7071067811865476`.
3
+ *
4
+ * This is a local implementation of the native `Math.SQRT1_2` constant.
5
+ * @category Constants
6
+ */
7
+ export const SQRT1_2: SQRT1_2 = 0.7071067811865476;
8
+ export type SQRT1_2 = 0.7071067811865476;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The square root of `2`, approximately equal to `1.4142135623730951`.
3
+ *
4
+ * This is a local implementation of the native `Math.SQRT2` constant.
5
+ * @category Constants
6
+ */
7
+ export const SQRT2: SQRT2 = 1.4142135623730951;
8
+ export type SQRT2 = 1.4142135623730951;
package/src/cos.ts ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Calculates the cosine of a number, returning a value in the range `[-1, 1]`.
3
+ *
4
+ * @module cos
5
+ */
6
+ import { abs } from "./abs.js";
7
+ import { EPSILON } from "./constants/epsilon.js";
8
+ import { NAN } from "./constants/nan.js";
9
+ import { isFinite } from "./guards/finite.js";
10
+
11
+ /**
12
+ * Calculates the cosine of a number, returning a value in the range `[-1, 1]`.
13
+ *
14
+ * @param x The angle in radians whose cosine is to be calculated.
15
+ * @returns The cosine of the provided angle.
16
+ * @category Trigonometry
17
+ * @tags cosine
18
+ */
19
+ export function cos(x: number): number {
20
+ if (!isFinite(x)) return NAN;
21
+
22
+ let sum = 1, term = 1, n = 0;
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/cosh.ts ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Calculates the hyperbolic cosine of a number.
3
+ *
4
+ * @module cosh
5
+ */
6
+ import { exp } from "./exp.js";
7
+
8
+ /**
9
+ * Calculates the hyperbolic cosine of a number.
10
+ *
11
+ * @param x The number whose hyperbolic cosine is to be calculated.
12
+ * @returns The hyperbolic cosine of the provided number.
13
+ * @category Trigonometry
14
+ * @tags hyperbolic, cosine
15
+ */
16
+ export function cosh(x: number): number {
17
+ return (exp(x) + exp(-x)) / 2;
18
+ }
package/src/exp.ts ADDED
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @category Exponential
3
+ * @module exp
4
+ */
5
+ import { EPSILON } from "./constants/epsilon.js";
6
+ import { isNegativeInfinity } from "./guards/negative_infinity.js";
7
+ import { isPositiveInfinity } from "./guards/positive_infinity.js";
8
+ import { isNaN } from "./guards/nan.js";
9
+ import { abs } from "./abs.js";
10
+
11
+ /**
12
+ * Calculates the exponential function of a number, returning `e^x`.
13
+ *
14
+ * This is functionally equivalent to the `Math.exp` function.
15
+ *
16
+ * @param x The number to calculate the exponential function of (e^x)
17
+ * @returns The exponential function of the provided number.
18
+ * @category Exponential
19
+ * @example
20
+ * ```ts no-eval
21
+ * import { exp } from "@nick/math";
22
+ * import assert from "node:assert";
23
+ *
24
+ * assert.equal(exp(0), 1);
25
+ * assert.equal(exp(1), 2.7182818284590455);
26
+ * assert.equal(exp(2), 7.389056098930649);
27
+ * ```
28
+ */
29
+ export function exp(x: number): number {
30
+ if (isNegativeInfinity(x)) return 0;
31
+ if (isPositiveInfinity(x) || isNaN(x)) return x;
32
+ if (x === 0) return 1;
33
+
34
+ const a = abs(x);
35
+ let result = 1, term = 1, iteration = 1;
36
+
37
+ // Using Taylor series expansion to approximate e^x
38
+ while (term > EPSILON) {
39
+ term *= a / iteration;
40
+ result += term;
41
+ iteration += 1;
42
+ }
43
+
44
+ return x < 0 ? 1 / result : result;
45
+ }
package/src/expm1.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Calculates the exponential of `x` minus 1 (`exp(x) - 1`) with a high degree
3
+ * of accuracy, even for very small values of `x`.
4
+ *
5
+ * @module expm1
6
+ */
7
+ import { EPSILON } from "./constants/epsilon.js";
8
+ import { abs } from "./abs.js";
9
+ import { exp } from "./exp.js";
10
+ import { NEGATIVE_INFINITY } from "./constants/negative_infinity.js";
11
+ import { POSITIVE_INFINITY } from "./constants/positive_infinity.js";
12
+
13
+ /**
14
+ * Calculates `exp(x) - 1` (the exponential of x minus 1).
15
+ *
16
+ * Accurate even for very small values of x.
17
+ *
18
+ * @param x The number whose exponential minus 1 is to be calculated.
19
+ * @returns The value of `exp(x) - 1`.
20
+ * @category Exponential
21
+ */
22
+ export function expm1(x: number): number {
23
+ // fast paths for common cases
24
+ if ((x = +x) === 0) return x; // respect -0
25
+ if (x === POSITIVE_INFINITY) return x;
26
+ if (x === NEGATIVE_INFINITY) return -1;
27
+ // for very small values of x, exp(x) - 1 is approximately equal to x
28
+ if (abs(x) < EPSILON) return x;
29
+ // for all other values of x, exp(x) - 1 is accurate
30
+ return exp(x) - 1;
31
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Rounds a number to the nearest 16-bit floating point value (half precision).
3
+ *
4
+ * Based on `Math.f16round` function from the TC39 Proposal for [Float16Array],
5
+ * which began shipping in ES2024, this function follows the same rounding and
6
+ * conversion rules as per the IEEE 754-2008 specification for half-precision
7
+ * floating-point numbers (also known as binary16).
8
+ *
9
+ * [Float16Array]: https://github.com/tc39/proposal-float16array
10
+ *
11
+ * @module f16round
12
+ */
13
+ import { roundFloat16 } from "./float16/round.js";
14
+
15
+ /**
16
+ * Rounds a number to the nearest 16-bit floating point value (half precision).
17
+ *
18
+ * Based on `Math.f16round` function from the TC39 Proposal for [Float16Array],
19
+ * which began shipping in ES2024, this function follows the same rounding and
20
+ * conversion rules as per the IEEE 754-2008 specification for half-precision
21
+ * floating-point numbers (also known as binary16).
22
+ *
23
+ * [Float16Array]: https://github.com/tc39/proposal-float16array
24
+ *
25
+ * @param x The number to round.
26
+ * @returns The 16-bit floating point rounded value of the number.
27
+ * @category Rounding
28
+ * @tags float, float16
29
+ * @example
30
+ * ```ts
31
+ * import { f16round } from "@nick/math/f16round";
32
+ * import { PI } from "@nick/math/constants";
33
+ *
34
+ * console.assert(f16round(PI) === 3.140625); // OK
35
+ * ```
36
+ */
37
+ export function f16round(x: number): number {
38
+ return roundFloat16(x);
39
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * This module provides constants used by the encoding/decoding APIs in the
3
+ * `@nick/math/float16` suite. These are primarily used to handle special cases
4
+ * such as `NaN`, `Infinity`, and `-0`, which have unique representations in
5
+ * the IEEE-754 half-precision floating point format.
6
+ *
7
+ * These are intended for primarily internal use, but are exported for the sake
8
+ * of completeness and transparency, as well as for potential userland usage in
9
+ * cases where the constants are needed for custom encoding/decoding logic.
10
+ *
11
+ * @module float16/constants
12
+ */
13
+
14
+ import type { FloatFormat } from "../internal/ieee754.js";
15
+
16
+ /**
17
+ * Well-known bit pattern representing `NaN` in the IEEE-754 half-precision (or
18
+ * "binary16") format.
19
+ *
20
+ * @category Constants
21
+ * @tags float16, ieee-754, NaN
22
+ */
23
+ export const FLOAT16_NAN = 0x7E00;
24
+
25
+ /**
26
+ * Well-known bit pattern representing `+Infinity` (positive infinity) in the
27
+ * IEEE-754 half-precision (or "binary16") format.
28
+ *
29
+ * @category Constants
30
+ * @tags float16, ieee-754, Infinity
31
+ */
32
+ export const FLOAT16_POSITIVE_INFINITY = 0x7C00;
33
+
34
+ /**
35
+ * Well-known bit pattern representing `-Infinity` (negative infinity) in the
36
+ * IEEE-754 half-precision (or "binary16") format.
37
+ *
38
+ * @category Constants
39
+ * @tags float16, ieee-754, Infinity
40
+ */
41
+ export const FLOAT16_NEGATIVE_INFINITY = 0xFC00;
42
+
43
+ /**
44
+ * Well-known bit pattern representing `-0` (negative zero) in the IEEE-754
45
+ * half-precision (or "binary16") format.
46
+ *
47
+ * @category Constants
48
+ * @tags float16, ieee-754, zero
49
+ */
50
+ export const FLOAT16_NEGATIVE_ZERO = 0x8000;
51
+
52
+ /**
53
+ * Well-known bit pattern representing `+0` (positive zero) in the IEEE-754
54
+ * half-precision (or "binary16") format.
55
+ *
56
+ * **Note**: This constant, unlike the others, is equivalent to its bit pattern
57
+ * representation (all bits are zero). As such, this is not strictly necessary
58
+ * for encoding/decoding, but is included for completeness and consistency.
59
+ *
60
+ * @category Constants
61
+ * @tags float16, ieee-754, zero
62
+ */
63
+ export const FLOAT16_POSITIVE_ZERO = 0x0000;
64
+
65
+ /**
66
+ * The number of bits used for the exponent in the IEEE-754 half-precision
67
+ * (or "binary16") format.
68
+ *
69
+ * @category Constants
70
+ * @tags float16, ieee-754, exponent
71
+ */
72
+ export const FLOAT16_EXPONENT_BITS = 0x5;
73
+
74
+ /**
75
+ * The number of bits used for the mantissa in the IEEE-754 half-precision
76
+ * (or "binary16") format.
77
+ *
78
+ * @category Constants
79
+ * @tags float16, ieee-754, mantissa
80
+ */
81
+ export const FLOAT16_MANTISSA_BITS = 0xA;
82
+
83
+ /**
84
+ * The exponent bias used in the IEEE-754 half-precision (or "binary16")
85
+ * format.
86
+ *
87
+ * @category Constants
88
+ * @tags float16, ieee-754, bias
89
+ */
90
+ export const FLOAT16_EXPONENT_BIAS = 0xF;
91
+
92
+ /**
93
+ * Represents the IEEE-754 binary16 (half-precision) floating-point format.
94
+ *
95
+ * @internal
96
+ */
97
+ export default {
98
+ exponent: FLOAT16_EXPONENT_BITS,
99
+ mantissa: FLOAT16_MANTISSA_BITS,
100
+ bias: FLOAT16_EXPONENT_BIAS,
101
+ nan: FLOAT16_NAN,
102
+ positive_infinity: FLOAT16_POSITIVE_INFINITY,
103
+ negative_infinity: FLOAT16_NEGATIVE_INFINITY,
104
+ negative_zero: FLOAT16_NEGATIVE_ZERO,
105
+ positive_zero: FLOAT16_POSITIVE_ZERO,
106
+ } as const satisfies FloatFormat;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * This module provides functions for decoding 16-bit half-precision floating
3
+ * point numbers (`Float16`) from IEEE 754-2008 encoded `Uint16` values, like
4
+ * those returned by {@linkcode encodeFloat16} or DataView's `geUint16` method.
5
+ *
6
+ * The `Float16` format is a 16-bit representation of a floating point number
7
+ * that follows the IEEE 754-2008 standard for half-precision binary16 floating
8
+ * point numbers. This format is used to store floating point values in a
9
+ * DataView or TypedArray, and is used in graphics programming and other
10
+ * performance-sensitive applications.
11
+ *
12
+ * The `decodeFloat16` function decodes a 16-bit half-precision floating point
13
+ * value into a standard JavaScript number, which can be used in arithmetic
14
+ * operations or passed to other functions.
15
+ *
16
+ * @module float16/decode
17
+ */
18
+ import float16 from "./constants.js";
19
+ import { decode } from "../internal/ieee754.js";
20
+
21
+ /**
22
+ * Decodes a 16-bit unsigned integer (`Uint16`) into a 16-bit half-precision
23
+ * floating point value (`Float16`) with 10 bits of mantissa. This function
24
+ * follows the IEEE 754-2008 spec for half-precision floating point numbers.
25
+ *
26
+ * The input value is expected to be the result of an encoding operation, such
27
+ * as the value returned by the {@linkcode encodeFloat16} function, or by
28
+ * DataView's `getUint16` method when reading a half-precision float.
29
+ *
30
+ * This function is used internally by the {@linkcode f16round} function to
31
+ * convert the intermediate value back into a standard JavaScript number. The
32
+ * returned value is a standard JavaScript number, which can be used in
33
+ * arithmetic operations or passed to other functions.
34
+ *
35
+ * ## Special Cases
36
+ *
37
+ * The following special cases are handled separately, short-circuiting the
38
+ * decoding process to return a well-known constant value (as per IEEE spec):
39
+ *
40
+ * - `0x7E00` (32256) decodes to `NaN`
41
+ * - `0x7C00` (31744) decodes to `+Infinity`
42
+ * - `0xFC00` (64512) decodes to `-Infinity`
43
+ * - `0x8000` (32768) decodes to `-0`
44
+ *
45
+ * @param bits The encoded 16-bit half-precision floating point value.
46
+ * @returns The decoded standard JavaScript number.
47
+ * @example
48
+ * ```ts
49
+ * import { decodeFloat16 } from "@nick/math/float16";
50
+ *
51
+ * console.log(decodeFloat16(0x4248)); // 3.140625
52
+ *
53
+ * const view = new DataView(new Float16Array([3.14]).buffer);
54
+ * console.log(decodeFloat16(view.getUint16(0))); // 3.140625
55
+ * ```
56
+ * @category IEEE-754
57
+ * @tags float, float16, decode
58
+ */
59
+ export function decodeFloat16(bits: number): number {
60
+ return decode(bits, float16);
61
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * This module provides functions for encoding standard JavaScript numbers into
3
+ * 16-bit half-precision floating point numbers (`Float16`) that follow the
4
+ * IEEE 754-2008 standard for half-precision binary16 floating point numbers.
5
+ *
6
+ * The `Float16` format is a 16-bit representation of a floating point number
7
+ * that is used to store floating point values in a DataView or TypedArray.
8
+ * This format is used in graphics programming and other performance-sensitive
9
+ * applications.
10
+ *
11
+ * The `encodeFloat16` function encodes a standard JavaScript number into a
12
+ * 16-bit half-precision floating point value, which can be stored in a
13
+ * DataView via `setUint16`, or used in other applications that require the
14
+ * `Float16` format.
15
+ *
16
+ * @module float16/encode
17
+ */
18
+
19
+ import float16 from "./constants.js";
20
+ import { encode } from "../internal/ieee754.js";
21
+
22
+ /**
23
+ * Encodes a standard JavaScript number (a 64-bit double-precision floating
24
+ * point value, 52 bits of mantissa) into a 16-bit unsigned integer (Uint16).
25
+ * This function follows the IEEE 754-2008 standard for half-precision 16-bit
26
+ * floating point numbers, also known as `Float16` (or `binary16` in the spec).
27
+ *
28
+ * This function is used internally by the {@linkcode f16round} function to
29
+ * convert the input number into a portable intermediate form, which it then
30
+ * transforms into the `Float16` format via the {@linkcode decodeFloat16}.
31
+ *
32
+ * The returned value can be used to store half-precision floating point values
33
+ * in a DataView via `setUint16`, since it is equivalent to the result of the
34
+ * method `DataView.prototype.getUint16` when reading a half-precision float.
35
+ *
36
+ * ## Encoding Scheme
37
+ *
38
+ * The encoding scheme varies based on the input value classification:
39
+ *
40
+ * - Normal (within the normal range of representable values)
41
+ * - Subnormal (too small to be represented with full precision)
42
+ * - Special cases
43
+ *
44
+ * ## Special Cases
45
+ *
46
+ * The following special cases are handled separately, short-circuiting the
47
+ * encoding process to return a well-known constant value:
48
+ *
49
+ * - `NaN` is encoded as `0x7E00` (32256).
50
+ * - `Infinity` is encoded as `0x7C00` (31744).
51
+ * - `-Infinity` is encoded as `0xFC00` (64512).
52
+ * - `-0` is encoded as `0x8000` (32768).
53
+ *
54
+ * @param value The standard JavaScript number to encode.
55
+ * @returns An encoded unsigned 16-bit integer that represents the input value.
56
+ * @example
57
+ * ```ts
58
+ * import { encodeFloat16 } from "@nick/math/float16";
59
+ *
60
+ * console.log(encodeFloat16(3.14)); // 0x4248 (16968)
61
+ *
62
+ * const view = new DataView(new ArrayBuffer(2));
63
+ * view.setUint16(0, encodeFloat16(3.14));
64
+ * console.log(view.getUint16(0)); // 16968
65
+ * console.log(view.getFloat16(0)); // 3.140625
66
+ * ```
67
+ * @category IEEE-754
68
+ * @tags float16, float, encode
69
+ */
70
+ export function encodeFloat16(value: number): number {
71
+ return encode(value, float16);
72
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * This submodule provides type guards specific to the float16 module of the
3
+ * `@nick/math` library, namely the {@linkcode isFloat16} predicate function.
4
+ *
5
+ * @module float16/guards
6
+ */
7
+ import { isNaN } from "../guards/nan.js";
8
+ import type { Float16 } from "../types/float.js";
9
+ import { roundFloat16 } from "./round.js";
10
+
11
+ /**
12
+ * Checks if a value is a valid {@linkcode Float16} as per IEEE 754-2008.
13
+ *
14
+ * @param it The value to check.
15
+ * @returns `true` if the value is a float16 number, `false` otherwise.
16
+ * @see https://en.wikipedia.org/wiki/Half-precision_floating-point_format
17
+ * @see https://en.wikipedia.org/wiki/IEEE_754
18
+ * @example
19
+ * ```ts
20
+ * import { isFloat16 } from "@nick/math/float16/guards";
21
+ *
22
+ * console.log(isFloat16(0.5)); // true
23
+ * console.log(isFloat16(0.1)); // false
24
+ * ```
25
+ * @see {@linkcode isFloat32} for a similar function for float32 numbers.
26
+ * @category Guards
27
+ * @tags float16
28
+ */
29
+ export function isFloat16<N extends number>(it: N): it is Float16<N>;
30
+ export function isFloat16(it: unknown): it is Float16<number>;
31
+ export function isFloat16(it: unknown): it is Float16 {
32
+ return typeof it === "number" && !isNaN(it) && it === roundFloat16(it);
33
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Utilities for working with `float16` values (16-bit half precision floating
3
+ * point numbers), as defined by IEEE 754-2008.
4
+ *
5
+ * @module float16
6
+ */
7
+ export * from "./decode.js";
8
+ export * from "./encode.js";
9
+ export * from "./guards.js";
10
+ export * from "./round.js";
@@ -0,0 +1,43 @@
1
+ /**
2
+ * This module provides functions for rounding numbers to 16-bit floating point
3
+ * values that follow the IEEE 754-2008 standard for half-precision binary16
4
+ * floating point numbers.
5
+ *
6
+ * The `roundFloat16` function rounds a number to the nearest 16-bit floating
7
+ * point value (half precision), following the same rounding and conversion
8
+ * rules as the native `Math.f16round` function from the TC39 Proposal for
9
+ * [Float16Array], which began shipping in ES2024.
10
+ *
11
+ * [Float16Array]: https://github.com/tc39/proposal-float16array
12
+ *
13
+ * @module float16/round
14
+ */
15
+ import { encodeFloat16 } from "./encode.js";
16
+ import { decodeFloat16 } from "./decode.js";
17
+
18
+ /**
19
+ * Rounds a number to the nearest 16-bit floating point value (half precision).
20
+ *
21
+ * Based on `Math.f16round` function from the TC39 Proposal for [Float16Array],
22
+ * which began shipping in ES2024, this function follows the same rounding and
23
+ * conversion rules as per the IEEE 754-2008 specification for half-precision
24
+ * floating-point numbers (also known as binary16).
25
+ *
26
+ * [Float16Array]: https://github.com/tc39/proposal-float16array
27
+ *
28
+ * @param x The number to round.
29
+ * @returns The 16-bit floating point rounded value of the number.
30
+ * @category Rounding
31
+ * @tags float, float16
32
+ * @example
33
+ * ```ts
34
+ * import { roundFloat16 } from "@nick/math/float16/round";
35
+ * import { PI } from "@nick/math/constants";
36
+ * import assert from "node:assert";
37
+ *
38
+ * assert.strictEqual(roundFloat16(PI), 3.140625); // OK
39
+ * ```
40
+ */
41
+ export function roundFloat16(x: number): number {
42
+ return decodeFloat16(encodeFloat16(+x));
43
+ }