cmath-js 5.8.0 → 5.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -27,6 +27,7 @@ Implementation of parts of C++'s numerics libraries in TypeScript/JavaScript, in
27
27
  These functions accept either a `bigint` or an integer `number`:
28
28
 
29
29
  - [`abs`](https://en.cppreference.com/c/numeric/math/abs)
30
+ - [`bit_ceil`](https://en.cppreference.com/cpp/numeric/bit_ceil)
30
31
  - [`countl_one`](https://en.cppreference.com/cpp/numeric/countl_one) as `create_countl_one`, which is used this way:
31
32
  ```ts
32
33
  import { create_countl_one } from "cmath-js";
@@ -47,6 +48,7 @@ These functions accept either a `bigint` or an integer `number`:
47
48
  // Prints "The greatest common divisor of 24 and 32 is 8."
48
49
  console.log(`The greatest common divisor of 24 and 32 is ${gcd(24, 32)}.`);
49
50
  ```
51
+ - [`has_single_bit`](https://en.cppreference.com/cpp/numeric/has_single_bit)
50
52
  - [`lcm`](https://en.cppreference.com/cpp/numeric/lcm)
51
53
  - [`popcount`](https://en.cppreference.com/cpp/numeric/popcount)
52
54
 
@@ -0,0 +1 @@
1
+ export declare function bit_ceil<Integer extends bigint | number>(integer: Integer): Integer;
@@ -0,0 +1,8 @@
1
+ import { bit_ceil_bigint } from "./bit_ceil_bigint.js";
2
+ import { bit_ceil_number } from "./bit_ceil_number.js";
3
+ export function bit_ceil(integer) {
4
+ return typeof integer === "number"
5
+ ? bit_ceil_number(integer)
6
+ : bit_ceil_bigint(integer);
7
+ }
8
+ //# sourceMappingURL=bit_ceil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bit_ceil.js","sourceRoot":"","sources":["../../../../src/namespace-std/integers/bit_ceil/bit_ceil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AASvD,MAAM,UAAU,QAAQ,CAAkC,OAAgB;IACzE,OAAO,OAAO,OAAO,KAAK,QAAQ;QACjC,CAAC,CAAE,eAAe,CAAC,OAAO,CAAa;QACvC,CAAC,CAAE,eAAe,CAAC,OAAO,CAAa,CAAC;AAC1C,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function bit_ceil_bigint(integer: bigint): bigint;
@@ -0,0 +1,7 @@
1
+ export function bit_ceil_bigint(integer) {
2
+ if (integer < 2n) {
3
+ return 1n;
4
+ }
5
+ return 1n << BigInt((integer - 1n).toString(2).length);
6
+ }
7
+ //# sourceMappingURL=bit_ceil_bigint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bit_ceil_bigint.js","sourceRoot":"","sources":["../../../../src/namespace-std/integers/bit_ceil/bit_ceil_bigint.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,OAAe;IAC9C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,EAAE,IAAI,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function bit_ceil_number(integer: number): number;
@@ -0,0 +1,14 @@
1
+ export function bit_ceil_number(integer) {
2
+ if (!Number.isSafeInteger(integer) || integer < 1 || integer > 2 ** 52) {
3
+ return 1;
4
+ }
5
+ let minusOne = integer - 1;
6
+ let power = 32;
7
+ if (minusOne >= 2 ** 32) {
8
+ power = 64;
9
+ minusOne /= 2 ** 32;
10
+ }
11
+ power -= Math.clz32(minusOne);
12
+ return 2 ** power;
13
+ }
14
+ //# sourceMappingURL=bit_ceil_number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bit_ceil_number.js","sourceRoot":"","sources":["../../../../src/namespace-std/integers/bit_ceil/bit_ceil_number.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,OAAe;IAC9C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACxE,OAAO,CAAC,CAAC;IACV,CAAC;IAED,IAAI,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;IAE3B,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,QAAQ,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACzB,KAAK,GAAG,EAAE,CAAC;QACX,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IACD,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,KAAK,CAAC;AACnB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function has_single_bit(integer: bigint | number): boolean;
@@ -0,0 +1,8 @@
1
+ export function has_single_bit(integer) {
2
+ if (typeof integer === "number" && !Number.isInteger(integer)) {
3
+ return false;
4
+ }
5
+ const asBigInt = BigInt(integer);
6
+ return asBigInt !== 0n && !(asBigInt & (asBigInt - 1n));
7
+ }
8
+ //# sourceMappingURL=has_single_bit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has_single_bit.js","sourceRoot":"","sources":["../../../src/namespace-std/integers/has_single_bit.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,cAAc,CAAC,OAAwB;IACtD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export { abs } from "./abs.ts";
2
+ export { bit_ceil } from "./bit_ceil/bit_ceil.ts";
2
3
  export * from "./count-left-or-right-bits/index.ts";
3
4
  export { div, type div_t, type div_t_bigint, type div_t_number } from "./div/index.ts";
4
5
  export { gcd } from "./gcd/gcd.ts";
6
+ export { has_single_bit } from "./has_single_bit.ts";
5
7
  export { lcm } from "./lcm/lcm.ts";
6
8
  export { popcount } from "./popcount.ts";
@@ -1,7 +1,9 @@
1
1
  export { abs } from "./abs.js";
2
+ export { bit_ceil } from "./bit_ceil/bit_ceil.js";
2
3
  export * from "./count-left-or-right-bits/index.js";
3
4
  export { div } from "./div/index.js";
4
5
  export { gcd } from "./gcd/gcd.js";
6
+ export { has_single_bit } from "./has_single_bit.js";
5
7
  export { lcm } from "./lcm/lcm.js";
6
8
  export { popcount } from "./popcount.js";
7
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/namespace-std/integers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,cAAc,qCAAqC,CAAC;AACpD,OAAO,EAAE,GAAG,EAAoD,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/namespace-std/integers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,OAAO,EAAE,GAAG,EAAoD,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/oskarlh/cmath-js.git"
7
7
  },
8
- "version": "5.8.0",
8
+ "version": "5.10.0",
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./dist/index.d.ts",