@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,105 @@
1
+ /**
2
+ * This module provides constants used by the encoding/decoding APIs in the
3
+ * `@nick/math/float32` 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 float32/constants
12
+ */
13
+
14
+ import type { FloatFormat } from "../internal/ieee754.js";
15
+
16
+ /**
17
+ * The number of bits used for the exponent in the IEEE-754 single-precision
18
+ * (or "binary32") format.
19
+ *
20
+ * @category Constants
21
+ * @tags float32, ieee-754, exponent
22
+ */
23
+ export const FLOAT32_EXPONENT_BITS = 8;
24
+
25
+ /**
26
+ * The number of bits used for the mantissa in the IEEE-754 single-precision
27
+ * (or "binary32") format.
28
+ *
29
+ * @category Constants
30
+ * @tags float32, ieee-754, mantissa
31
+ */
32
+ export const FLOAT32_MANTISSA_BITS = 23;
33
+
34
+ /**
35
+ * The exponent bias used in the IEEE-754 single-precision (or "binary32") format.
36
+ *
37
+ * @category Constants
38
+ * @tags float32, ieee-754, exponent, bias
39
+ */
40
+ export const FLOAT32_EXPONENT_BIAS = 127;
41
+
42
+ /**
43
+ * Well-known bit pattern representing `NaN` in the IEEE-754 single-precision (or
44
+ * "binary32") format.
45
+ *
46
+ * @category Constants
47
+ * @tags float32, ieee-754, NaN
48
+ */
49
+ export const FLOAT32_NAN = 0x7FC00000;
50
+
51
+ /**
52
+ * Well-known bit pattern representing `+Infinity` (positive infinity) in the
53
+ * IEEE-754 single-precision (or "binary32") format.
54
+ *
55
+ * @category Constants
56
+ * @tags float32, ieee-754, Infinity
57
+ */
58
+ export const FLOAT32_POSITIVE_INFINITY = 0x7F800000;
59
+
60
+ /**
61
+ * Well-known bit pattern representing `-Infinity` (negative infinity) in the
62
+ * IEEE-754 single-precision (or "binary32") format.
63
+ *
64
+ * @category Constants
65
+ * @tags float32, ieee-754, Infinity
66
+ */
67
+ export const FLOAT32_NEGATIVE_INFINITY = 0xFF800000;
68
+
69
+ /**
70
+ * Well-known bit pattern representing `-0` (negative zero) in the IEEE-754
71
+ * single-precision (or "binary32") format.
72
+ *
73
+ * @category Constants
74
+ * @tags float32, ieee-754, zero
75
+ */
76
+ export const FLOAT32_NEGATIVE_ZERO = 0x80000000;
77
+
78
+ /**
79
+ * Well-known bit pattern representing `+0` (positive zero) in the IEEE-754
80
+ * single-precision (or "binary32") format.
81
+ *
82
+ * **Note**: This constant, unlike the others, is equivalent to its bit pattern
83
+ * representation (all bits are zero). As such, this is not strictly necessary
84
+ * for encoding/decoding, but is included for completeness and consistency.
85
+ *
86
+ * @category Constants
87
+ * @tags float32, ieee-754, zero
88
+ */
89
+ export const FLOAT32_POSITIVE_ZERO = 0x00000000;
90
+
91
+ /**
92
+ * Represents the IEEE-754 binary32 (single-precision) floating-point format.
93
+ *
94
+ * @internal
95
+ */
96
+ export default {
97
+ exponent: FLOAT32_EXPONENT_BITS,
98
+ mantissa: FLOAT32_MANTISSA_BITS,
99
+ bias: FLOAT32_EXPONENT_BIAS,
100
+ nan: FLOAT32_NAN,
101
+ positive_infinity: FLOAT32_POSITIVE_INFINITY,
102
+ negative_infinity: FLOAT32_NEGATIVE_INFINITY,
103
+ negative_zero: FLOAT32_NEGATIVE_ZERO,
104
+ positive_zero: FLOAT32_POSITIVE_ZERO,
105
+ } as const satisfies FloatFormat;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * This module provides functions for decoding 32-bit single-precision floating
3
+ * point numbers (`Float32`) from IEEE 754-2008 encoded `Uint32` values, like
4
+ * those returned by {@linkcode encodeFloat32} or DataView's `geUint32` method.
5
+ *
6
+ * The `Float32` format is a 32-bit representation of a floating point number
7
+ * that follows the IEEE 754-2008 standard for single-precision binary32
8
+ * floating point numbers. This format is used to store floating point values
9
+ * in a DataView via `setUint32`, and is equivalent to the result of calling
10
+ * `DataView.prototype.getUint32` when reading a single-precision float.
11
+ *
12
+ * To encode a standard JavaScript number into a `Float32` value, use the
13
+ * {@linkcode encodeFloat32} function of the `./encode` module, passing it the
14
+ * number you want to encode. The result can then be stored in a DataView via
15
+ * `setUint32`, or used as an intermediate value for further processing.
16
+ *
17
+ * To decode the `Float32` value back into a standard JavaScript number (but
18
+ * with 32-bits of precision), use the {@linkcode decodeFloat32} function of
19
+ * this module, passing it the encoded value.
20
+ *
21
+ * @module float32/decode
22
+ */
23
+ import float32 from "./constants.js";
24
+ import { decode } from "../internal/ieee754.js";
25
+
26
+ /**
27
+ * Decodes a 32-bit unsigned integer (`Uint32`) into a 32-bit single-precision
28
+ * floating point value (`Float32`) with 23 bits of mantissa. This function
29
+ * follows the IEEE 754-2008 spec for single-precision floating point numbers.
30
+ *
31
+ * The input value is expected to be the result of an encoding operation, such
32
+ * as the value returned by the {@linkcode encodeFloat32} function, or by
33
+ * DataView's `getUint32` method when reading a single-precision float.
34
+ *
35
+ * This function is used internally by the {@linkcode fround} function to
36
+ * convert the intermediate value back into a standard JavaScript number.
37
+ *
38
+ * ## Special Cases
39
+ *
40
+ * The following special cases are handled separately, short-circuiting the
41
+ * decoding process to return a well-known constant value (as per IEEE spec):
42
+ *
43
+ * - `0x7FC00000` (2139095040) decodes to `NaN`
44
+ * - `0x7F800000` (2139095040) decodes to `+Infinity`
45
+ * - `0xFF800000` (4286578688) decodes to `-Infinity`
46
+ * - `0x80000000` (2147483648) decodes to `-0`
47
+ *
48
+ * @param bits The encoded 32-bit single-precision floating point value.
49
+ * @returns The decoded standard JavaScript number.
50
+ * @example
51
+ * ```ts
52
+ * import { decodeFloat32 } from "@nick/math/float32";
53
+ *
54
+ * console.log(decodeFloat32(0x40490FDB)); // 3.
55
+ *
56
+ * const view = new DataView(new Float32Array([3.14]).buffer);
57
+ * console.log(decodeFloat32(view.getUint32(0)));
58
+ * ```
59
+ * @category IEEE-754
60
+ * @tags float, float32, decode
61
+ */
62
+ export function decodeFloat32(bits: number): number {
63
+ return decode(bits, float32);
64
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * This module provides functions for encoding standard JavaScript numbers
3
+ * (64-bit double-precision floating point values) into 32-bit unsigned
4
+ * integers (Uint32) that represent single-precision floating point numbers.
5
+ *
6
+ * The `Float32` format is a 32-bit representation of a floating point number
7
+ * that follows the IEEE 754-2008 standard for single-precision binary32
8
+ * floating point numbers. This format is used to store floating point values
9
+ * in a DataView via `setUint32`, and is equivalent to the result of calling
10
+ * `DataView.prototype.getUint32` when reading a single-precision float.
11
+ *
12
+ * To decode a `Float32` value back into a standard JavaScript number, use the
13
+ * {@linkcode decodeFloat32} function of the `./decode` module, passing it the
14
+ * encoded value returned by {@linkcode encodeFloat32}.
15
+ *
16
+ * @module float32/encode
17
+ */
18
+ import float32 from "./constants.js";
19
+ import { encode } from "../internal/ieee754.js";
20
+
21
+ /**
22
+ * Encodes a standard JavaScript number (a 64-bit double-precision floating
23
+ * point value, 52 bits of mantissa) into a 32-bit unsigned integer (Uint32).
24
+ * This function follows the IEEE 754-2008 standard for single-precision 32-bit
25
+ * floating point numbers, also known as `Float32` (or `binary32`).
26
+ *
27
+ * This function is used internally by the {@linkcode fround} function to
28
+ * convert the input number into a portable intermediate form, which it then
29
+ * transforms into the `Float32` format via the {@linkcode decodeFloat32}.
30
+ *
31
+ * The returned value can be used to store single-precision floating point
32
+ * values in a DataView via `setUint32`, since it is equivalent to the result
33
+ * of `DataView.prototype.getUint32` when reading a single-precision float.
34
+ *
35
+ * ## Encoding Scheme
36
+ *
37
+ * The encoding scheme varies based on the input value classification:
38
+ *
39
+ * - Normal (within the normal range of representable values)
40
+ * - Subnormal (too small to be represented with full precision)
41
+ * - Special cases (see below)
42
+ *
43
+ * ## Special Cases
44
+ *
45
+ * The following special cases are handled separately, short-circuiting the
46
+ * encoding process to return a well-known constant value:
47
+ *
48
+ * - `NaN` is encoded as `0x7FC00000` (2139095040).
49
+ * - `Infinity` is encoded as `0x7F800000` (2139095040).
50
+ * - `-Infinity` is encoded as `0xFF800000` (4286578688).
51
+ * - `-0` is encoded as `0x80000000` (2147483648).
52
+ *
53
+ * @param value The standard JavaScript number to encode.
54
+ * @returns An encoded unsigned 32-bit integer that represents the input value.
55
+ * @example
56
+ * ```ts
57
+ * import { encodeFloat32 } from "@nick/math/ieee754";
58
+ *
59
+ * console.log(encodeFloat32(3.14)); // 0x40490FDB (1078523339)
60
+ *
61
+ * const view = new DataView(new ArrayBuffer(4));
62
+ * view.setUint32(0, encodeFloat32(3.14));
63
+ * console.log(view.getUint32(0)); // 1078523339
64
+ * console.log(view.getFloat32(0)); // 3.140625
65
+ * ```
66
+ * @category IEEE-754
67
+ * @tags float32, encode
68
+ */
69
+ export function encodeFloat32(value: number): number {
70
+ return encode(value, float32);
71
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * This submodule provides type guards specific to the float32 module of the
3
+ * `@nick/math` library, namely the {@linkcode isFloat32} predicate function.
4
+ *
5
+ * @module float32/guards
6
+ */
7
+ import { isNaN } from "../guards/nan.js";
8
+ import { type Finite, isFinite } from "../guards/finite.js";
9
+ import type { Float32 } from "../types/float.js";
10
+ import { roundFloat32 } from "./round.js";
11
+
12
+ /**
13
+ * Checks if a value is a valid {@linkcode Float32} as per IEEE 754-2008.
14
+ *
15
+ * @param it The value to check.
16
+ * @returns `true` if the value is a {@linkcode Float32}; otherwise, false.
17
+ * @see https://en.wikipedia.org/wiki/Single-precision_floating-point_format
18
+ * @see https://en.wikipedia.org/wiki/IEEE_754
19
+ * @example
20
+ * ```ts
21
+ * import { isFloat32 } from "@nick/math/float32/guards";
22
+ *
23
+ * console.log(isFloat32(0.5)); // true
24
+ * console.log(isFloat32(0.1)); // false
25
+ * ```
26
+ * @see {@linkcode isFloat16} for a similar function for float16 numbers.
27
+ * @category Guards
28
+ * @tags float32
29
+ */
30
+ export function isFloat32<N extends number>(it: N): it is Float32<N>;
31
+ export function isFloat32(it: unknown): it is Float32<number>;
32
+ export function isFloat32(it: unknown): it is Float32 {
33
+ return typeof it === "number" && !isNaN(it) && it === roundFloat32(it);
34
+ }
35
+
36
+ /**
37
+ * Checks if the given value is a finite float32 number, as per the IEEE
38
+ * 754-2008 spec. This is a stricter version of {@linkcode isFloat32} that also
39
+ * checks if the value is finite, i.e. neither `Infinity`, `-Infinity`, nor
40
+ * `NaN`.
41
+ *
42
+ * @param value The value to check.
43
+ * @returns `true` if the value is a finite float32 number, `false` otherwise.
44
+ * @see {@linkcode isFloat32} for a less strict version of this function.
45
+ * @category Guards
46
+ * @tags float32
47
+ */
48
+ export function isFiniteFloat32<N extends number>(
49
+ it: N,
50
+ ): it is Finite<N> & Float32<N>;
51
+ export function isFiniteFloat32(it: unknown): it is Float32<number>;
52
+ export function isFiniteFloat32(it: unknown): it is Float32 {
53
+ return isFloat32(it) && isFinite(it);
54
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Utilities for working with `float32` values (32-bit single precision
3
+ * floating point numbers), as defined by IEEE 754-2008.
4
+ *
5
+ * @module float32
6
+ */
7
+ export * from "./decode.js";
8
+ export * from "./encode.js";
9
+ export * from "./guards.js";
10
+ export * from "./round.js";
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Rounds a number to the nearest 32-bit floating point value (single
3
+ * precision), following the IEEE 754-2008 specification.
4
+ *
5
+ * @module float32/round
6
+ */
7
+ import { encodeFloat32 } from "./encode.js";
8
+ import { decodeFloat32 } from "./decode.js";
9
+
10
+ /**
11
+ * Rounds a number to the nearest 32-bit floating point value (single
12
+ * precision).
13
+ *
14
+ * Based on `Math.fround` function, this function follows the same rounding and
15
+ * conversion rules as per the IEEE 754-2008 specification for single-precision
16
+ * floating-point numbers (also known as `binary32`).
17
+ *
18
+ * @param x The number to round.
19
+ * @returns The 32-bit floating point rounded value of the number.
20
+ * @category Rounding
21
+ * @tags float, float32
22
+ * @example
23
+ * ```ts
24
+ * import { roundFloat32 } from "@nick/math/float32/round";
25
+ * import { PI } from "@nick/math/constants";
26
+ * import assert from "node:assert";
27
+ *
28
+ * assert.strictEqual(roundFloat32(PI), Math.fround(PI)); // OK
29
+ * ```
30
+ */
31
+ export function roundFloat32(x: number): number {
32
+ return decodeFloat32(encodeFloat32(+x));
33
+ }
package/src/floor.ts ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Performant local implementation of the `Math.floor` function.
3
+ *
4
+ * @category Arithmetic
5
+ * @module floor
6
+ */
7
+ import { NEGATIVE_INFINITY } from "./constants/negative_infinity.js";
8
+ import { POSITIVE_INFINITY } from "./constants/positive_infinity.js";
9
+
10
+ /**
11
+ * Performant local implementation of the `Math.floor` function.
12
+ *
13
+ * @param x The number to round down to the nearest whole number
14
+ * @returns The largest integer less than or equal to the provided number.
15
+ * @category Arithmetic
16
+ * @tags rounding, floor
17
+ */
18
+ export function floor(x: number): number {
19
+ x = +x;
20
+ if (x !== x || x === POSITIVE_INFINITY || x === NEGATIVE_INFINITY) return x;
21
+ if (x === 0) return x;
22
+ const remainder = x % 1;
23
+ if (remainder === 0) return x;
24
+ const truncated = x - remainder;
25
+ return x < 0 ? truncated - 1 : truncated;
26
+ }
package/src/fround.ts ADDED
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Rounds a number to the nearest 32-bit floating point value (single
3
+ * precision).
4
+ *
5
+ * @module fround
6
+ */
7
+ import { roundFloat32 } from "./float32/round.js";
8
+
9
+ /**
10
+ * Rounds a number to the nearest 32-bit floating point value (single
11
+ * precision).
12
+ *
13
+ * Based on `Math.fround` function, this function follows the same rounding and
14
+ * conversion rules as per the IEEE 754-2008 specification for single-precision
15
+ * floating-point numbers (also known as `binary32`).
16
+ *
17
+ * @param x The number to round.
18
+ * @returns The 32-bit floating point rounded value of the number.
19
+ * @category Rounding
20
+ * @tags float, float32
21
+ * @example
22
+ * ```ts
23
+ * import { fround } from "@nick/math/fround";
24
+ * import { PI } from "@nick/math/constants";
25
+ *
26
+ * console.assert(fround(PI) === 3.1415927410125732); // OK
27
+ * console.assert(Math.fround(PI) === 3.1415927410125732); // OK
28
+ * ```
29
+ */
30
+ export function fround(x: number): number {
31
+ return roundFloat32(x);
32
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Checks if a number is finite, meaning it is not infinite or `NaN`.
3
+ *
4
+ * This is a dependency-free, type-safe implementation of the `Number.isFinite`
5
+ * function. It is not dependent on the global `Number` object and will not be
6
+ * affected by global variable shadowing, reassignment, or malicious tampering.
7
+ *
8
+ * @module guards/finite
9
+ */
10
+ import { isNaN } from "./nan.js";
11
+ import { isNegativeInfinity } from "./negative_infinity.js";
12
+ import { isPositiveInfinity } from "./positive_infinity.js";
13
+ import type { Finite } from "../types/finite.js";
14
+
15
+ /**
16
+ * Checks if a number is finite, meaning it is not infinite or `NaN`.
17
+ *
18
+ * This is a dependency-free, type-safe implementation of the `Number.isFinite`
19
+ * function. It is not dependent on the global `Number` object and will not be
20
+ * affected by global variable shadowing, reassignment, or malicious tampering.
21
+ *
22
+ * @param number The value to check.
23
+ * @returns `true` if the value is finite, `false` otherwise.
24
+ * @category Guards
25
+ * @tags Finite
26
+ */
27
+ export function isFinite<N extends number>(
28
+ number: N,
29
+ ): number is Finite<N>;
30
+
31
+ /**
32
+ * Checks if a number is finite, meaning it is not infinite or `NaN`.
33
+ *
34
+ * @param number The value to check.
35
+ * @returns `true` if the value is finite, `false` otherwise.
36
+ */
37
+ export function isFinite(number: unknown): number is Finite;
38
+
39
+ /** @internal */
40
+ export function isFinite(number: unknown): number is Finite {
41
+ return typeof number === "number" && !isNaN(number) &&
42
+ !isPositiveInfinity(number) && !isNegativeInfinity(number);
43
+ }
44
+
45
+ export type { Finite };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Type guards for checking various numeric conditions, ensuring a value is of
3
+ * the expected type/value both at runtime and at compile-time.
4
+ *
5
+ * This module provides type-safe implementations for every native numeric
6
+ * guard in the ECMAScript specification, including all top-level global guards
7
+ * like [`isNaN`], and static `Number` methods like [`isFinite`].
8
+ *
9
+ * | Type Guard | Description | Native Equivalent |
10
+ * | ---------------------- | ------------------------------------------------------------- | --------------------------------------- |
11
+ * | [`isNaN`] | Checks if a value is `NaN` when coerced to a number. | [`isNaN`][native-isnan] |
12
+ * | [`isFinite`] | Checks if a number is finite (i.e., not `±Infinity` or `NaN`) | [`isFinite`][native-isfinite] |
13
+ * | [`isInteger`] | Checks if a value is an integer when coerced to a number. | `--` |
14
+ * | [`isSafeInteger`] | Checks if a number is a safe integer without coercion. | [`Number.isSafeInteger`][issafeinteger] |
15
+ * | [`isNumberInteger`] | Checks if a number is an integer without coercion. | [`Number.isInteger`][number-isint] |
16
+ * | [`isNumberNaN`] | Checks if a number is `NaN` without coercion. | [`Number.isNaN`][native-number-isnan] |
17
+ * | [`isNegativeZero`] | Checks if a number is `-0`. | [`Object.is`][native-object-is] |
18
+ * | [`isPositiveZero`] | Checks if a number is `+0` (and explicitly not `-0`). | [`Object.is`][native-object-is] |
19
+ * | [`isInfinity`] | Checks if a number is `+Infinity` or `-Infinity`. | `--` |
20
+ * | [`isNegativeInfinity`] | Checks if a number is `-Infinity`. | `--` |
21
+ * | [`isPositiveInfinity`] | Checks if a number is `+Infinity`. | `--` |
22
+ *
23
+ * [`isFinite`]: https://jsr.io/@nick/math/doc/guards/finite/~/isFinite
24
+ * [`isInfinity`]: https://jsr.io/@nick/math/doc/guards/infinity/~/isInfinity
25
+ * [`isInteger`]: https://jsr.io/@nick/math/doc/guards/integer/~/isInteger
26
+ * [`isSafeInteger`]: https://jsr.io/@nick/math/doc/guards/safe-integer/~/isSafeInteger
27
+ * [`isNumberInteger`]: https://jsr.io/@nick/math/doc/guards/integer/~/isNumberInteger
28
+ * [`isNaN`]: https://jsr.io/@nick/math/doc/guards/nan/~/isNaN
29
+ * [`isNumberNaN`]: https://jsr.io/@nick/math/doc/guards/nan/~/isNumberNaN
30
+ * [`isPositiveInfinity`]: https://jsr.io/@nick/math/doc/guards/positive-infinity/~/isPositiveInfinity
31
+ * [`isNegativeInfinity`]: https://jsr.io/@nick/math/doc/guards/negative-infinity/~/isNegativeInfinity
32
+ * [`isPositiveZero`]: https://jsr.io/@nick/math/doc/guards/positive-zero/~/isPositiveZero
33
+ * [`isNegativeZero`]: https://jsr.io/@nick/math/doc/guards/negative-zero/~/isNegativeZero
34
+ * [native-isfinite]: https://mdn.io/isFinite
35
+ * [issafeinteger]: https://mdn.io/Number.isSafeInteger
36
+ * [number-isint]: https://mdn.io/Number.isInteger
37
+ * [native-isnan]: https://mdn.io/isNaN
38
+ * [native-number-isnan]: https://mdn.io/Number.isNaN
39
+ * [native-object-is]: https://mdn.io/Object.is
40
+ *
41
+ * @module guards
42
+ */
43
+ export * from "./finite.js";
44
+ export * from "./infinity.js";
45
+ export * from "./integer.js";
46
+ export * from "./nan.js";
47
+ export * from "./negative_zero.js";
48
+ export * from "./positive_zero.js";
49
+ export * from "./safe_integer.js";
@@ -0,0 +1,2 @@
1
+ export * from "./negative_infinity.js";
2
+ export * from "./positive_infinity.js";
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Checks if the provided number is a whole number (integer), in a way that is
3
+ * immune to any global variable shadowing or reassignment.
4
+ *
5
+ * @param it The number to check for being an integer.
6
+ * @returns `true` if the provided number is an integer, otherwise `false`.
7
+ * @category Arithmetic
8
+ * @module isInteger
9
+ */
10
+ import type { Integer } from "../types/integer.js";
11
+
12
+ /**
13
+ * Checks if the provided number is a whole number (integer), similar to
14
+ * `Number.isInteger`, but values are coerced into numbers before checking.
15
+ * For a check that matches `Number.isInteger` (no input coercion), see
16
+ * {@linkcode isNumberInteger}.
17
+ *
18
+ * @param it The number to check for being an integer.
19
+ * @returns `true` if the provided number is an integer, otherwise `false`.
20
+ * @category Guards
21
+ * @tags Integer
22
+ */
23
+ export function isInteger<const N extends number>(
24
+ number: N,
25
+ ): number is Integer<N>;
26
+
27
+ /**
28
+ * Checks if the provided number is a whole number (integer), similar to
29
+ * `Number.isInteger`, but values are coerced into numbers before checking.
30
+ * For a check that matches `Number.isInteger` (no input coercion), see
31
+ * {@linkcode isNumberInteger}.
32
+ *
33
+ * @param number The value to check.
34
+ * @returns `true` if the provided number is an integer, otherwise `false`.
35
+ * @category Guards
36
+ * @tags Integer
37
+ */
38
+ export function isInteger(number: unknown): number is Integer<number>;
39
+
40
+ /** @internal */
41
+ // deno-lint-ignore no-explicit-any
42
+ export function isInteger(number: any): number is Integer<number> {
43
+ return (number = +number) % 1 === 0;
44
+ }
45
+
46
+ /**
47
+ * Checks if a given number is a whole number (integer), in a way that is
48
+ * identical to the native `Number.isInteger` method (i.e., no coercion is
49
+ * performed on inputs).
50
+ *
51
+ * @param number The value to check.
52
+ * @returns `true` if the number is integral, otherwise `false`.
53
+ * @category Guards
54
+ * @tags Number, Integer
55
+ */
56
+ export function isNumberInteger<const N extends number>(
57
+ number: N,
58
+ ): number is Integer<N> {
59
+ return number % 1 === 0;
60
+ }
61
+
62
+ export type { Integer };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Checks if the provided number is `NaN` (Not a Number), in a way that is
3
+ * immune to any global variable shadowing or reassignment.
4
+ *
5
+ * Unlike the global `isNaN` function, this one narrows its input to a special
6
+ * nominal type `NAN`, which allows you to distinguish between `NaN` and other
7
+ * `number` values on the type level.
8
+ *
9
+ * @param it The number to check for NaN.
10
+ * @returns `true` if the provided number is `NaN`, otherwise `false`.
11
+ * @example
12
+ * ```ts
13
+ * import { isNaN, NAN } from "@nick/math";
14
+ * import assert from "node:assert";
15
+ *
16
+ * function assertNotNaN<T extends number>(
17
+ * value: T
18
+ * ): asserts value is Exclude<T, NAN> {
19
+ * if (isNaN(value)) throw new TypeError("Expected value to be non-NaN");
20
+ * }
21
+ *
22
+ * const x = 42, y = NAN;
23
+ *
24
+ * assertNotNaN(x); // OK
25
+ * assert.throws(() => assertNotNaN(y)); // Error: Expected value to be non-NaN
26
+ * ```
27
+ * @category Arithmetic
28
+ * @module isNaN
29
+ */
30
+
31
+ import { NAN } from "../constants/nan.js";
32
+
33
+ /**
34
+ * Checks if the provided number is `NaN` (Not a Number), in a way that is
35
+ * immune to any global variable shadowing or reassignment.
36
+ *
37
+ * Unlike the global `isNaN` function, this one narrows its input to a special
38
+ * nominal type `NAN`, which allows you to distinguish between `NaN` and other
39
+ * `number` values on the type level.
40
+ *
41
+ * @param it The number to check for NaN.
42
+ * @returns `true` if the provided number is `NaN`, otherwise `false`.
43
+ * @example
44
+ * ```ts
45
+ * import { isNaN, NAN } from "@nick/math";
46
+ * import assert from "node:assert";
47
+ *
48
+ * function assertNotNaN<T extends number>(
49
+ * value: T
50
+ * ): asserts value is Exclude<T, NAN> {
51
+ * if (isNaN(value)) throw new TypeError("Expected value to be non-NaN");
52
+ * }
53
+ *
54
+ * const x = 42, y = NAN;
55
+ *
56
+ * assertNotNaN(x); // OK
57
+ * assert.throws(() => assertNotNaN(y)); // Error: Expected value to be non-NaN
58
+ * ```
59
+ * @category Arithmetic
60
+ */
61
+ export function isNaN(it: number): it is NAN {
62
+ return (it = +it) !== it;
63
+ }
64
+
65
+ export { NAN, NAN as NaN };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Checks if the provided number is `-Infinity` (negative infinity), in a way
3
+ * that is immune to any global variable shadowing or reassignment.
4
+ *
5
+ * @module negative-infinity
6
+ */
7
+ import { NEGATIVE_INFINITY } from "../constants/negative_infinity.js";
8
+
9
+ /**
10
+ * Checks if the provided number is `-Infinity` (negative infinity), in a way
11
+ * that is immune to any global variable shadowing or reassignment.
12
+ *
13
+ * @param it The number to check for negative infinity.
14
+ * @returns `true` if the provided number is `-Infinity`, otherwise `false`.
15
+ * @category Guards
16
+ * @tags Negative Infinity
17
+ */
18
+ export function isNegativeInfinity(it: number): it is NEGATIVE_INFINITY {
19
+ return +it === NEGATIVE_INFINITY;
20
+ }
21
+
22
+ export { NEGATIVE_INFINITY };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Checks if the provided number is a negative zero.
3
+ *
4
+ * @module negative-zero
5
+ */
6
+ import { isNegativeInfinity } from "./negative_infinity.js";
7
+ import { NEGATIVE_ZERO } from "../constants/negative_zero.js";
8
+
9
+ /**
10
+ * Checks if the provided number is a negative zero.
11
+ *
12
+ * @param it The number to check for negative zero.
13
+ * @returns `true` if the provided number is `-0`, otherwise `false`.
14
+ * @category Guards
15
+ * @tags Negative Zero
16
+ */
17
+ export function isNegativeZero(it: number): it is NEGATIVE_ZERO {
18
+ return (it = +it) === 0 && isNegativeInfinity(1 / it);
19
+ }
20
+
21
+ export { NEGATIVE_ZERO };