@tktb-tess/util-fns 0.1.6 → 0.2.1
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 +1 -1
- package/dist/baillie-psw.d.ts.map +1 -1
- package/dist/fraction.d.ts +64 -0
- package/dist/fraction.d.ts.map +1 -0
- package/dist/main.d.ts +2 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/math.d.ts +2 -2
- package/dist/math.d.ts.map +1 -1
- package/dist/pcg-minimal.d.ts +6 -4
- package/dist/pcg-minimal.d.ts.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/package.json +11 -6
- package/src/baillie-psw.ts +0 -1
- package/src/fraction.ts +194 -0
- package/src/main.ts +3 -0
- package/src/math.ts +62 -63
- package/src/pcg-minimal.ts +13 -12
- package/src/util.ts +2 -4
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baillie-psw.d.ts","sourceRoot":"","sources":["../src/baillie-psw.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"baillie-psw.d.ts","sourceRoot":"","sources":["../src/baillie-psw.ts"],"names":[],"mappings":"AAsIA;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,YAoDnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAW3D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,EAAE,eAAa,WAWvE,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
declare const __fraction_brand: unique symbol;
|
|
2
|
+
export default class Fraction {
|
|
3
|
+
#private;
|
|
4
|
+
readonly [__fraction_brand]: unknown;
|
|
5
|
+
constructor(numerator: bigint, denominator: bigint);
|
|
6
|
+
/**
|
|
7
|
+
* `number` 型から構成
|
|
8
|
+
* @param value 値
|
|
9
|
+
* @param denominatorDigits 分母の桁数 (十進)
|
|
10
|
+
*/
|
|
11
|
+
static fromDecimal(value: number, denominatorDigits?: number): Fraction;
|
|
12
|
+
/**
|
|
13
|
+
* -1 倍
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
minus(): Fraction;
|
|
17
|
+
/**
|
|
18
|
+
* 逆数
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
inverse(): Fraction;
|
|
22
|
+
/**
|
|
23
|
+
* 加法 (非破壊的)
|
|
24
|
+
* @param right
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
add(right: Fraction): Fraction;
|
|
28
|
+
/**
|
|
29
|
+
* 減法
|
|
30
|
+
* @param right
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
substr(right: Fraction): Fraction;
|
|
34
|
+
/**
|
|
35
|
+
* 乗法
|
|
36
|
+
* @param right
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
multiply(right: Fraction): Fraction;
|
|
40
|
+
/**
|
|
41
|
+
* 除法
|
|
42
|
+
* @param right
|
|
43
|
+
* @returns
|
|
44
|
+
*/
|
|
45
|
+
divide(right: Fraction): Fraction;
|
|
46
|
+
/**
|
|
47
|
+
* `number` 型の小数に変換
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
toDecimal(): number;
|
|
51
|
+
/**
|
|
52
|
+
* 分数の文字列に変換
|
|
53
|
+
* @returns
|
|
54
|
+
*/
|
|
55
|
+
toString(): string;
|
|
56
|
+
valueOf(): number;
|
|
57
|
+
toJSON(): {
|
|
58
|
+
type: string;
|
|
59
|
+
numerator: string;
|
|
60
|
+
denominator: string;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=fraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fraction.d.ts","sourceRoot":"","sources":["../src/fraction.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,gBAAgB,eAAW,CAAC;AAElC,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAG3B,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;gBAEzB,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAelD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,SAAK;IAoCxD;;;OAGG;IACH,KAAK;IAIL;;;OAGG;IACH,OAAO;IAIP;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,QAAQ;IAQnB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ;IAItB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAMxB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ;IAMtB;;;OAGG;IACH,SAAS;IAIT;;;OAGG;IACH,QAAQ;IAIR,OAAO;IAIP,MAAM;;;;;CAOP"}
|
package/dist/main.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ import { isEqArray, sleep, lazify, parseCSV, getHash, BItoBuffer, bufferToBI } f
|
|
|
2
2
|
import { getRndInt, residue, toBigInt, getRandBIByBitLength, getRandBIByRange, modPow, exEuclidean, factorial, rot32, rot32BI, jacobiSymbol, isSquare } from './math';
|
|
3
3
|
import PCGMinimal from './pcg-minimal';
|
|
4
4
|
import { bailliePSW, getRandPrimeByBitLength, getRandPrimeByRange } from './baillie-psw';
|
|
5
|
-
|
|
5
|
+
import Fraction from './fraction';
|
|
6
|
+
export { isEqArray, sleep, lazify, parseCSV, getHash, BItoBuffer, bufferToBI, getRndInt, residue, toBigInt, getRandBIByBitLength, getRandBIByRange, modPow, exEuclidean, factorial, rot32, rot32BI, jacobiSymbol, isSquare, bailliePSW, getRandPrimeByBitLength, getRandPrimeByRange, PCGMinimal, Fraction };
|
|
6
7
|
//# sourceMappingURL=main.d.ts.map
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACT,MAAM,QAAQ,CAAC;AAEhB,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACT,MAAM,QAAQ,CAAC;AAEhB,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACT,CAAC"}
|
package/dist/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const n=(n,t)=>{if(n.length!==t.length)return!1;for(let r=0;r<n.length;r++)if(n[r]!==t[r])return!1;return!0},t=n=>new Promise(t=>{setTimeout(()=>{t()},n)}),r=n=>(...t)=>()=>n(...t),e=n=>{const t=[];let r=[],e="",o=!1;for(let i=0;i<n.length;i++){const s=n[i];'"'!==s||0!==i&&"\\"===n[i-1]?","!==s||o?"\n"!==s||o?e+=s:(r.push(e.trim()),t.push(r),r=[],e=""):(r.push(e.trim()),e=""):o=!o}return r.push(e.trim()),t.push(r),t},o=async(n,t)=>{const r=Buffer.from(n,"utf8")
|
|
1
|
+
const n=(n,t)=>{if(n.length!==t.length)return!1;for(let r=0;r<n.length;r++)if(n[r]!==t[r])return!1;return!0},t=n=>new Promise(t=>{setTimeout(()=>{t()},n)}),r=n=>(...t)=>()=>n(...t),e=n=>{const t=[];let r=[],e="",o=!1;for(let i=0;i<n.length;i++){const s=n[i];'"'!==s||0!==i&&"\\"===n[i-1]?","!==s||o?"\n"!==s||o?e+=s:(r.push(e.trim()),t.push(r),r=[],e=""):(r.push(e.trim()),e=""):o=!o}return r.push(e.trim()),t.push(r),t},o=async(n,t)=>{const r=Buffer.from(n,"utf8"),e=await crypto.subtle.digest(t,r);return Buffer.from(e)},i=n=>{let t=n.toString(16);return 1&t.length&&(t="0"+t),Buffer.from(t,"hex")},s=n=>{const t=n.toString("hex")||"00";return BigInt("0x"+t)},u=(n,t)=>Math.floor(Math.random()*(t-n)+n),a=(n,t)=>{const r=n%t;return r<0n?r+t:r},f=(...n)=>n.map(n=>BigInt(n)),h=(n,t=!1)=>{if(!Number.isFinite(n))throw Error("`length` is not a valid number");if(n<=0)throw Error("`length` must be positive");const r=Math.ceil(n/8);let e=crypto.getRandomValues(Buffer.alloc(r)).toString("binary").slice(0,n);return t&&(e=e.replace(/^./,"1")),BigInt("0b"+e)},m=(n,t)=>{if(n>=t)throw Error("rangeError");const r=t-n,e=r.toString(2).length;return n+(()=>{for(let n=0;n<1e5;n++){const n=h(e);if(n>=c(2n,BigInt(e),r))return n%r}throw Error("Failed to generate a random bigint")})()},c=(n,t,r)=>{if(r<1n)throw Error("`mod` must be positive");if(t<0n)throw Error("`power` must not be negative");for(;n<0n;)n+=r;if(1n===r)return 0n;if(n%r===1n||n%r===0n)return n;if(n===r-1n)return 1n&t?r-1n:1n;let e=1n;for(;t>0n;)1n&t&&(e=e*n%r),n=n*n%r,t>>=1n;return e},l=(n,t)=>{if(0n===n&&0n===t)return{x:0n,y:0n,gcd:0n};if(0n===n)return t>0n?{x:0n,y:-1n,gcd:t}:{x:0n,y:1n,gcd:-t};if(0n===t)return n>0n?{x:1n,y:0n,gcd:n}:{x:-1n,y:0n,gcd:-n};let[r,e,o]=[1n,0n,n],[i,s,u]=[0n,-1n,t];for(;;){const n=o/u,t=o-n*u;if(0n===t)break;[r,i]=[i,r-n*i],[e,s]=[s,e-n*s],[o,u]=[u,t]}return u<0n&&(i*=-1n,s*=-1n,u*=-1n),{x:i,y:s,gcd:u}},d=(n,t)=>{if(n>=t)return 1n;const r=(t-n)/2n;if(BigInt((t-2n).toString(2).length)*r<63n){let r=n;for(let e=n+2n;e<t;e+=2n)r*=e;return r}const e=n+r|1n;return d(n,e)*d(e,t)},g=n=>{if(n<0n)throw Error("'n' must be non-negative");if(0n===n)return 1n;const t=n-BigInt(n.toString(2).match(/1/g)?.length??0),r=(n=>{let t=3n,r=1n,e=1n;for(let o=BigInt(n.toString(2).length)-1n-1n;o>-1n;--o){const i=1n+(n>>o)|1n;e*=d(t,i),t=i,r*=e}return r})(n);return r<<t},b=(n,t)=>BigInt.asUintN(32,n>>(31n&t)|n<<(31n&-t)),w=(n,t)=>(n>>>(31&t)|n<<(32-t&31))>>>0,p=(n,t)=>{if(t<1n||t%2n==0n)throw Error("`n` is invalid");for(;n<0n;)n+=t;n%=t;let r=1n;for(;0n!==n;){for(;n%2n==0n;){n/=2n;const e=t%8n;3n!==e&&5n!==e||(r*=-1n)}[n,t]=[t,n],n%4n==3n&&t%4n==3n&&(r*=-1n),n%=t}return 1n===t?r:0n},y=n=>{if(n<0n)return!1;if(0n===n)return!0;let t=1n,r=n;for(;t+1n<r;){const e=(t+r)/2n;e**2n<n?t=e:r=e}return n===t**2n||n===(t+1n)**2n},B=Symbol(),E=[0x853c49e6748fea9bn,0xda3e39cb94b95bdbn];class S{#n=new BigUint64Array(2);[B];static getSeed(){return crypto.getRandomValues(new BigUint64Array(2))}constructor(n){n&&n[0]&&n[1]?(this.#n[1]=n[1]<<1n|1n,this.step(),this.#n[0]=n[0],this.step()):(this.#n[0]=E[0],this.#n[1]=E[1])}step(){this.#n[0]&&this.#n[1]&&(this.#n[0]=6364136223846793005n*this.#n[0]+this.#n[1])}get value(){const n=this.#n[0];if(!n)throw Error("empty state");const t=n>>59n,r=BigInt.asUintN(32,(n^n>>18n)>>27n);return w(Number(r),Number(t))}getRand(){return this.step(),this.value}getBoundedRand(n){const t=4294967296;if(n>t)throw Error("`bound` exceeded limit (2^32)");const r=t%n;for(;;){const t=this.getRand();if(t>=r)return t%n}}*genRands(n,t){for(let r=0;r<n;r++)yield"number"==typeof t?this.getBoundedRand(t):this.getRand()}}const x=(n,t)=>a(1n==(1n&n)?n+t>>1n:n>>1n,t),N=(n,t,r,e)=>{if(n%2n!=1n)throw Error("`n` must be odd");let o=n+1n,i=0n;for(;o%2n==0n;)o>>=1n,i+=1n;const[s,u]=((n,t,r,e)=>{let o=1n,i=r;const s=n.toString(2).slice(1);for(const n of s)[o,i]=[a(o*i,t),x(i*i+e*o*o,t)],"1"===n&&([o,i]=[x(r*o+i,t),x(e*o+r*i,t)]);return[o,i]})(o,n,r,t);let f=u;if(0n===s)return!0;e=c(e,o,n);for(let t=0n;t<i;t++){if(0n===f)return!0;f=a(f*f-2n*e,n),e=c(e,2n,n)}return!1},v=n=>{if(n<=1n)return!1;if(n%2n==0n)return 2n===n;const t=[2n,3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n];for(const r of t)if(n%r===0n)return n===r;if(!(n=>{if(n<=1n)return!1;if(n%2n==0n)return 2n===n;let t=n-1n,r=0n;for(;t%2n==0n;)t>>=1n,r+=1n;const[e,o]=[t,r];let i=c(2n,e,n);if(1n===i)return!0;for(let t=0n;t<o;t++){if(i===n-1n)return!0;i=i*i%n}return!1})(n))return!1;const[r,e]=(n=>{let t=5n,r=p(t,n);for(;r>0n;){if(t=t>0n?t+2n:t-2n,t*=-1n,-15n===t&&y(n))return[0n,0n];r=p(t,n)}return[t,r]})(n);if(0n===e)return!1;return N(n,r,1n,(1n-r)/4n)},I=(n,t)=>{if(t<2n)throw Error("noPrimesFound");for(let r=0;r<1e5;r++){const r=m(n,t);if(v(r))return r}throw Error("noPrimesFound")},R=(n,t=!1)=>{if(n<2)throw Error("noPrimesFound");for(let r=0;r<1e5;r++){const r=h(n,t);if(v(r))return r}throw Error("noPrimesFound")},F=Symbol();class M{#t;#r;[F];constructor(n,t){0n===t?(this.#r=0n,this.#t=0n===n?0n:n>0n?1n:-1n):t>0n?(this.#t=n,this.#r=t):(this.#t=-n,this.#r=-t),this.#e()}static fromDecimal(n,t=20){if(Number.isNaN(n))return new M(0n,0n);if(Math.abs(n)===1/0)return new M(n>0?1n:-1n,0n);const r=n<0;r&&(n*=-1);const e=BigInt(Math.floor(n));n=1/(n-Number(e));let[o,i]=[1n,e],[s,u]=[0n,1n];for(;`${u}`.length<t+1;){const t=BigInt(Math.floor(n));n=1/(n-Number(t)),[o,i]=[i,t*i+o],[s,u]=[u,t*u+s]}return new M(r?-o:o,s)}#e(){const{gcd:n}=l(this.#t,this.#r);this.#t/=n,this.#r/=n}minus(){return new M(-this.#t,this.#r)}inverse(){return new M(this.#r,this.#t)}add(n){const t=this.#r*n.#r,r=this.#t*n.#r+n.#t*this.#r;return new M(r,t)}substr(n){return new M(this.#t,this.#r).add(n.minus())}multiply(n){const t=this.#r*n.#r,r=this.#t*n.#t;return new M(r,t)}divide(n){return new M(this.#t,this.#r).multiply(n.inverse())}toDecimal(){return Number(this.#t)/Number(this.#r)}toString(){return`${this.#t}/${this.#r}`}valueOf(){return this.toDecimal()}toJSON(){return{type:"Fraction",numerator:this.#t.toString(),denominator:this.#r.toString()}}}export{i as BItoBuffer,M as Fraction,S as PCGMinimal,v as bailliePSW,s as bufferToBI,l as exEuclidean,g as factorial,o as getHash,h as getRandBIByBitLength,m as getRandBIByRange,R as getRandPrimeByBitLength,I as getRandPrimeByRange,u as getRndInt,n as isEqArray,y as isSquare,p as jacobiSymbol,r as lazify,c as modPow,e as parseCSV,a as residue,w as rot32,b as rot32BI,t as sleep,f as toBigInt};
|
|
2
2
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../src/util.ts","../src/math.ts","../src/pcg-minimal.ts","../src/baillie-psw.ts"],"sourcesContent":[null,null,null,null],"names":["isEqArray","arr1","arr2","length","i","sleep","delay","Promise","resolve","setTimeout","lazify","func","args","parseCSV","csv","rows","row","currentField","isInsideOfQuote","char","push","trim","getHash","async","str","algorithm","utf8","Buffer","from","crypto","subtle","digest","then","hash","BItoBuffer","n","toString","bufferToBI","buf","BigInt","getRndInt","min","max","Math","floor","random","residue","mod","ans","toBigInt","nums","map","getRandBIByBitLength","fixed","Number","isFinite","Error","div","ceil","u32Arr","getRandomValues","Uint32Array","result","Array","padStart","join","slice","replace","getRandBIByRange","diff","bitLength","res","modPow","base","power","exEuclidean","a","b","x","y","gcd","x_1","y_1","c_1","x_2","y_2","c_2","q","c_nxt","factorial","oddProd","num_odds","mid","two_exp","match","odd_part","L_i","tmp","U_i","oddPart","rot32BI","value","rot","asUintN","rot32","jacobiSymbol","nMod8","isSquare","initialState","PCGMinimal","state","BigUint64Array","Symbol","toStringTag","name","getSeed","constructor","seeds","this","step","prev","shifted","getRand","getBoundedRand","bound","limit","threshold","r","genRands","div2Mod","lucasSPP","D","P","Q","d","s","U","V_","k","V","digits","digit","UVSubscript","bailliePSW","smallPrimes","p","d_","s_","millerRabinAtBase2","j","DChooser","getRandPrimeByRange","count","getRandPrimeByBitLength"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../src/util.ts","../src/math.ts","../src/pcg-minimal.ts","../src/baillie-psw.ts","../src/fraction.ts"],"sourcesContent":[null,null,null,null,null],"names":["isEqArray","arr1","arr2","length","i","sleep","delay","Promise","resolve","setTimeout","lazify","func","args","parseCSV","csv","rows","row","currentField","isInsideOfQuote","char","push","trim","getHash","async","str","algorithm","utf8","Buffer","from","hash","crypto","subtle","digest","BItoBuffer","n","toString","bufferToBI","buf","BigInt","getRndInt","min","max","Math","floor","random","residue","mod","ans","toBigInt","nums","map","getRandBIByBitLength","fixed","Number","isFinite","Error","byteLen","ceil","result","getRandomValues","alloc","slice","replace","getRandBIByRange","diff","bitLength","res","modPow","base","power","exEuclidean","a","b","x","y","gcd","x_1","y_1","c_1","x_2","y_2","c_2","q","c_nxt","oddProd","num_odds","mid","factorial","twoExp","match","odd","L_i","tmp","U_i","oddPart","rot32BI","value","rot","asUintN","rot32","jacobiSymbol","nMod8","isSquare","__pcg_brand","Symbol","initialState","PCGMinimal","state","BigUint64Array","getSeed","constructor","seeds","this","step","prev","shifted","getRand","getBoundedRand","bound","limit","threshold","r","genRands","div2Mod","lucasSPP","D","P","Q","d","s","U","V_","k","V","digits","digit","UVSubscript","bailliePSW","smallPrimes","p","d_","s_","millerRabinAtBase2","j","DChooser","getRandPrimeByRange","count","getRandPrimeByBitLength","__fraction_brand","Fraction","numerator","denominator","reduction","fromDecimal","denominatorDigits","isNaN","abs","Infinity","isNegative","a_0","p_n","p_n1","q_n","q_n1","a_n1","minus","inverse","add","right","denom","num","substr","multiply","divide","toDecimal","valueOf","toJSON","type"],"mappings":"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"}
|
package/dist/math.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ export declare const modPow: (base: bigint, power: bigint, mod: bigint) => bigin
|
|
|
47
47
|
* @description `ax - by = gcd(a, b)`
|
|
48
48
|
* @param a
|
|
49
49
|
* @param b
|
|
50
|
-
* @returns
|
|
50
|
+
* @returns
|
|
51
51
|
*/
|
|
52
52
|
export declare const exEuclidean: (a: bigint, b: bigint) => {
|
|
53
53
|
x: bigint;
|
|
@@ -57,7 +57,7 @@ export declare const exEuclidean: (a: bigint, b: bigint) => {
|
|
|
57
57
|
/**
|
|
58
58
|
* 階乗を計算する \
|
|
59
59
|
* 参考: https://qiita.com/AkariLuminous/items/1b2e964ebabde9419224
|
|
60
|
-
* @param
|
|
60
|
+
* @param n 整数
|
|
61
61
|
* @returns 引数の階乗
|
|
62
62
|
*/
|
|
63
63
|
export declare const factorial: (n: bigint) => bigint;
|
package/dist/math.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAEjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,EAAE,KAAK,MAAM,WAG7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,MAAM,EAAE,aAEzC,CAAC;
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAEjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,EAAE,KAAK,MAAM,WAG7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,MAAM,EAAE,aAEzC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,eAAa,WAWjE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAiBxD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,WAiB9D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM;;;;CA8B/C,CAAC;AAkDF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAQlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,WAEjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,WAE/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,WA2BhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,YAejC,CAAC"}
|
package/dist/pcg-minimal.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
declare const __pcg_brand: unique symbol;
|
|
1
2
|
/**
|
|
2
3
|
* PCG-XSH-RR (Permuted congruential generator) 乱数のクラス
|
|
3
4
|
*/
|
|
4
5
|
export default class PCGMinimal {
|
|
5
6
|
#private;
|
|
6
|
-
|
|
7
|
+
readonly [__pcg_brand]: unknown;
|
|
7
8
|
/** シード値の配列を返す */
|
|
8
9
|
static getSeed(): BigUint64Array<ArrayBuffer>;
|
|
9
10
|
/**
|
|
@@ -18,13 +19,14 @@ export default class PCGMinimal {
|
|
|
18
19
|
* 普通はこれを使う
|
|
19
20
|
*/
|
|
20
21
|
getRand(): number;
|
|
21
|
-
/** `bound`
|
|
22
|
+
/** `bound` 未満の乱数を返す */
|
|
22
23
|
getBoundedRand(bound: number): number;
|
|
23
24
|
/**
|
|
24
|
-
* step
|
|
25
|
+
* step の値だけ乱数を生成する
|
|
25
26
|
* @param step
|
|
26
27
|
* @param bound
|
|
27
28
|
*/
|
|
28
|
-
genRands(step: number, bound?: number):
|
|
29
|
+
genRands(step: number, bound?: number): Generator<number, void, unknown>;
|
|
29
30
|
}
|
|
31
|
+
export {};
|
|
30
32
|
//# sourceMappingURL=pcg-minimal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcg-minimal.d.ts","sourceRoot":"","sources":["../src/pcg-minimal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pcg-minimal.d.ts","sourceRoot":"","sources":["../src/pcg-minimal.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,WAAW,eAAW,CAAC;AAQ7B;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;;IAK7B,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEhC,iBAAiB;IACjB,MAAM,CAAC,OAAO;IAId;;OAEG;gBACS,KAAK,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC;IAY/C,oBAAoB;IACpB,IAAI;IAMJ,+BAA+B;IAC/B,IAAI,KAAK,WAMR;IAED;;OAEG;IACH,OAAO;IAKP,uBAAuB;IACvB,cAAc,CAAC,KAAK,EAAE,MAAM;IAc5B;;;;OAIG;IACF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAKvC"}
|
package/dist/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,YAShD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,kBAMlC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,MAAM,GAChB,IAAI,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,MAC3D,GAAG,MAAM,IAAI,eAEC,CAAC;AAElB;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,eAiCnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,WAAW,mBAAmB,iCAIxE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,wBAInC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,WAGrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tktb-tess/util-fns",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "utility functions for personal use",
|
|
4
5
|
"main": "dist/main.js",
|
|
5
6
|
"type": "module",
|
|
7
|
+
"author": "Tessyrrhaqt",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/tktb-tess/util-fns"
|
|
12
|
+
},
|
|
6
13
|
"publishConfig": {
|
|
7
14
|
"access": "public"
|
|
8
15
|
},
|
|
9
16
|
"scripts": {
|
|
10
|
-
"build": "rm -r -f dist && rollup -c"
|
|
17
|
+
"build": "rm -r -f dist && rollup -c",
|
|
18
|
+
"test": "npx tsx test/main.test.ts"
|
|
11
19
|
},
|
|
12
|
-
"author": "Tessyrrhaqt",
|
|
13
|
-
"license": "MIT",
|
|
14
|
-
"description": "個人的に使う用の便利関数ライブラリ",
|
|
15
20
|
"devDependencies": {
|
|
16
21
|
"@rollup/plugin-commonjs": "^28.0.6",
|
|
17
22
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
@@ -19,7 +24,7 @@
|
|
|
19
24
|
"@rollup/plugin-typescript": "^12.1.4",
|
|
20
25
|
"@types/node": "^24.3.0",
|
|
21
26
|
"npm-check-updates": "^18.0.2",
|
|
22
|
-
"rollup": "^4.
|
|
27
|
+
"rollup": "^4.48.0",
|
|
23
28
|
"tslib": "^2.8.1",
|
|
24
29
|
"tsx": "^4.20.4",
|
|
25
30
|
"typescript": "^5.9.2"
|
package/src/baillie-psw.ts
CHANGED
package/src/fraction.ts
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { exEuclidean } from './math';
|
|
2
|
+
const __fraction_brand = Symbol();
|
|
3
|
+
|
|
4
|
+
export type FractionData = {
|
|
5
|
+
type: 'Fraction';
|
|
6
|
+
numerator: string;
|
|
7
|
+
denominator: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default class Fraction {
|
|
11
|
+
#numerator: bigint;
|
|
12
|
+
#denominator: bigint;
|
|
13
|
+
readonly [__fraction_brand]: unknown;
|
|
14
|
+
|
|
15
|
+
constructor(numerator: bigint, denominator: bigint) {
|
|
16
|
+
if (denominator === 0n) {
|
|
17
|
+
this.#denominator = 0n;
|
|
18
|
+
this.#numerator = numerator === 0n ? 0n : numerator > 0n ? 1n : -1n;
|
|
19
|
+
} else if (denominator > 0n) {
|
|
20
|
+
this.#numerator = numerator;
|
|
21
|
+
this.#denominator = denominator;
|
|
22
|
+
} else {
|
|
23
|
+
this.#numerator = -numerator;
|
|
24
|
+
this.#denominator = -denominator;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
this.#reduction();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* `number` 型から構成
|
|
32
|
+
* @param value 値
|
|
33
|
+
* @param denominatorDigits 分母の桁数 (十進)
|
|
34
|
+
*/
|
|
35
|
+
static fromDecimal(value: number, denominatorDigits = 20) {
|
|
36
|
+
if (Number.isNaN(value)) {
|
|
37
|
+
return new Fraction(0n, 0n);
|
|
38
|
+
} else if (Math.abs(value) === Infinity) {
|
|
39
|
+
return new Fraction(value > 0 ? 1n : -1n, 0n);
|
|
40
|
+
}
|
|
41
|
+
const isNegative = value < 0;
|
|
42
|
+
if (isNegative) value *= -1;
|
|
43
|
+
|
|
44
|
+
const a_0 = BigInt(Math.floor(value));
|
|
45
|
+
const fracPart = value - Number(a_0);
|
|
46
|
+
if (fracPart === 0) {
|
|
47
|
+
return new Fraction(isNegative ? -a_0 : a_0, 1n);
|
|
48
|
+
}
|
|
49
|
+
value = 1 / fracPart;
|
|
50
|
+
|
|
51
|
+
// 漸化式 参考: https://tsujimotter.hatenablog.com/entry/continued-fraction
|
|
52
|
+
// p_0 = 1, p_1 = a_0, p_{n+2} = a_{n+1} * p_{n+1} + p_n
|
|
53
|
+
// q_0 = 0, q_1 = 1, q_{n+2} = a_{n+1} * q_{n+1} + q_n
|
|
54
|
+
let [p_n, p_n1] = [1n, a_0];
|
|
55
|
+
let [q_n, q_n1] = [0n, 1n];
|
|
56
|
+
|
|
57
|
+
while (`${q_n1}`.length < denominatorDigits + 1) {
|
|
58
|
+
const a_n1 = BigInt(Math.floor(value));
|
|
59
|
+
const fracPart = value - Number(a_n1);
|
|
60
|
+
|
|
61
|
+
[p_n, p_n1] = [p_n1, a_n1 * p_n1 + p_n];
|
|
62
|
+
[q_n, q_n1] = [q_n1, a_n1 * q_n1 + q_n];
|
|
63
|
+
|
|
64
|
+
if (fracPart === 0) {
|
|
65
|
+
return new Fraction(isNegative ? -p_n1 : p_n1, q_n1);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
value = 1 / fracPart;
|
|
69
|
+
}
|
|
70
|
+
return new Fraction(isNegative ? -p_n : p_n, q_n);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 約分
|
|
75
|
+
*/
|
|
76
|
+
#reduction() {
|
|
77
|
+
const { gcd } = exEuclidean(this.#numerator, this.#denominator);
|
|
78
|
+
if (gcd !== 0n) {
|
|
79
|
+
this.#numerator /= gcd;
|
|
80
|
+
this.#denominator /= gcd;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* -1 倍
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
minus() {
|
|
89
|
+
return new Fraction(-this.#numerator, this.#denominator);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 逆数
|
|
94
|
+
* @returns
|
|
95
|
+
*/
|
|
96
|
+
inverse() {
|
|
97
|
+
return new Fraction(this.#denominator, this.#numerator);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* 加法 (非破壊的)
|
|
102
|
+
* @param right
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
add(right: Fraction) {
|
|
106
|
+
const denom = this.#denominator * right.#denominator;
|
|
107
|
+
const num =
|
|
108
|
+
this.#numerator * right.#denominator +
|
|
109
|
+
right.#numerator * this.#denominator;
|
|
110
|
+
return new Fraction(num, denom);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* 減法
|
|
115
|
+
* @param right
|
|
116
|
+
* @returns
|
|
117
|
+
*/
|
|
118
|
+
substr(right: Fraction) {
|
|
119
|
+
return new Fraction(this.#numerator, this.#denominator).add(right.minus());
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* 乗法
|
|
124
|
+
* @param right
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
127
|
+
multiply(right: Fraction) {
|
|
128
|
+
const denom = this.#denominator * right.#denominator;
|
|
129
|
+
const num = this.#numerator * right.#numerator;
|
|
130
|
+
return new Fraction(num, denom);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* 除法
|
|
135
|
+
* @param right
|
|
136
|
+
* @returns
|
|
137
|
+
*/
|
|
138
|
+
divide(right: Fraction) {
|
|
139
|
+
return new Fraction(this.#numerator, this.#denominator).multiply(
|
|
140
|
+
right.inverse()
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* `number` 型の小数に変換
|
|
146
|
+
* @returns
|
|
147
|
+
*/
|
|
148
|
+
toDecimal() {
|
|
149
|
+
return Number(this.#numerator) / Number(this.#denominator);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* 分数の文字列に変換
|
|
154
|
+
* @returns
|
|
155
|
+
*/
|
|
156
|
+
toString() {
|
|
157
|
+
if (this.#numerator === 0n && this.#denominator === 0n) {
|
|
158
|
+
return `NaN`;
|
|
159
|
+
} else if (this.#numerator === 0n) {
|
|
160
|
+
return `0`;
|
|
161
|
+
} else if (this.#denominator === 0n) {
|
|
162
|
+
return this.#numerator < 0n ? `-Infinity` : `Infinity`;
|
|
163
|
+
} else if (this.#denominator === 1n) {
|
|
164
|
+
return `${this.#numerator}`;
|
|
165
|
+
} else {
|
|
166
|
+
return `${this.#numerator}/${this.#denominator}`;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
valueOf() {
|
|
171
|
+
return this.toDecimal();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
toJSON(): FractionData {
|
|
175
|
+
return {
|
|
176
|
+
type: 'Fraction',
|
|
177
|
+
numerator: '0x' + this.#numerator.toString(16),
|
|
178
|
+
denominator: '0x' + this.#denominator.toString(16),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
static parse(text: string) {
|
|
183
|
+
const parsed = JSON.parse(text);
|
|
184
|
+
const { type, numerator, denominator } = parsed;
|
|
185
|
+
if (type !== 'Fraction') throw Error('cannot parse');
|
|
186
|
+
if (typeof numerator === 'string' && typeof denominator === 'string') {
|
|
187
|
+
const num = BigInt(numerator);
|
|
188
|
+
const denom = BigInt(denominator);
|
|
189
|
+
return new Fraction(num, denom);
|
|
190
|
+
} else {
|
|
191
|
+
throw Error('cannot parse');
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
package/src/main.ts
CHANGED
|
@@ -29,6 +29,8 @@ import {
|
|
|
29
29
|
getRandPrimeByRange,
|
|
30
30
|
} from './baillie-psw';
|
|
31
31
|
|
|
32
|
+
import Fraction from './fraction';
|
|
33
|
+
|
|
32
34
|
export {
|
|
33
35
|
isEqArray,
|
|
34
36
|
sleep,
|
|
@@ -53,4 +55,5 @@ export {
|
|
|
53
55
|
getRandPrimeByBitLength,
|
|
54
56
|
getRandPrimeByRange,
|
|
55
57
|
PCGMinimal,
|
|
58
|
+
Fraction
|
|
56
59
|
};
|
package/src/math.ts
CHANGED
|
@@ -28,7 +28,6 @@ export const toBigInt = (...nums: number[]) => {
|
|
|
28
28
|
return nums.map((n) => BigInt(n));
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
|
|
32
31
|
/**
|
|
33
32
|
* `length` ビットの乱数 or `length` ビット以下の乱数を出力する
|
|
34
33
|
* @param length ビット長
|
|
@@ -39,12 +38,12 @@ export const getRandBIByBitLength = (length: number, fixed = false) => {
|
|
|
39
38
|
if (!Number.isFinite(length)) throw Error('`length` is not a valid number');
|
|
40
39
|
if (length <= 0) throw Error('`length` must be positive');
|
|
41
40
|
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
let result = Array.from(
|
|
45
|
-
''
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
const byteLen = Math.ceil(length / 8);
|
|
42
|
+
const buf = crypto.getRandomValues(Buffer.alloc(byteLen));
|
|
43
|
+
let result = Array.from(buf, (n) => n.toString(2).padStart(8, '0'))
|
|
44
|
+
.join('')
|
|
45
|
+
.slice(0, length);
|
|
46
|
+
|
|
48
47
|
if (fixed) result = result.replace(/^./, '1');
|
|
49
48
|
// console.log(result);
|
|
50
49
|
return BigInt('0b' + result);
|
|
@@ -57,7 +56,7 @@ export const getRandBIByBitLength = (length: number, fixed = false) => {
|
|
|
57
56
|
* @returns `min` 以上 `max` 未満の乱数
|
|
58
57
|
*/
|
|
59
58
|
export const getRandBIByRange = (min: bigint, max: bigint) => {
|
|
60
|
-
if (min >= max) throw Error('
|
|
59
|
+
if (min >= max) throw Error('rangeError');
|
|
61
60
|
const diff = max - min;
|
|
62
61
|
const bitLength = diff.toString(2).length;
|
|
63
62
|
|
|
@@ -108,7 +107,7 @@ export const modPow = (base: bigint, power: bigint, mod: bigint) => {
|
|
|
108
107
|
* @description `ax - by = gcd(a, b)`
|
|
109
108
|
* @param a
|
|
110
109
|
* @param b
|
|
111
|
-
* @returns
|
|
110
|
+
* @returns
|
|
112
111
|
*/
|
|
113
112
|
export const exEuclidean = (a: bigint, b: bigint) => {
|
|
114
113
|
// a, b に 0 がある場合の処理
|
|
@@ -142,68 +141,68 @@ export const exEuclidean = (a: bigint, b: bigint) => {
|
|
|
142
141
|
return { x: x_2, y: y_2, gcd: c_2 };
|
|
143
142
|
};
|
|
144
143
|
|
|
144
|
+
/**
|
|
145
|
+
* min 以上 max 「未満」 の奇数の積を返す
|
|
146
|
+
* @param min 最小値
|
|
147
|
+
* @param max 最大値
|
|
148
|
+
* @returns min 以上 max 未満 の奇数の積
|
|
149
|
+
*/
|
|
150
|
+
const oddProd = (min: bigint, max: bigint): bigint => {
|
|
151
|
+
if (min >= max) return 1n;
|
|
152
|
+
|
|
153
|
+
const max_bits = BigInt((max - 2n).toString(2).length);
|
|
154
|
+
const num_odds = (max - min) / 2n;
|
|
155
|
+
|
|
156
|
+
if (max_bits * num_odds < 63n) {
|
|
157
|
+
let result = min;
|
|
158
|
+
for (let i = min + 2n; i < max; i += 2n) {
|
|
159
|
+
result *= i;
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const mid = (min + num_odds) | 1n;
|
|
165
|
+
const lower = oddProd(min, mid);
|
|
166
|
+
const higher = oddProd(mid, max);
|
|
167
|
+
return lower * higher;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* 階乗の奇数部分を計算する
|
|
172
|
+
* @param n 整数
|
|
173
|
+
* @returns 奇数部の積
|
|
174
|
+
*/
|
|
175
|
+
const oddPart = (n: bigint) => {
|
|
176
|
+
let L_i = 3n,
|
|
177
|
+
result = 1n,
|
|
178
|
+
tmp = 1n;
|
|
179
|
+
const m = BigInt(n.toString(2).length) - 1n;
|
|
180
|
+
|
|
181
|
+
for (let i = m - 1n; i > -1n; --i) {
|
|
182
|
+
const U_i = ((n >> i) + 1n) | 1n;
|
|
183
|
+
|
|
184
|
+
tmp *= oddProd(L_i, U_i);
|
|
185
|
+
L_i = U_i;
|
|
186
|
+
result *= tmp;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return result;
|
|
190
|
+
};
|
|
191
|
+
|
|
145
192
|
/**
|
|
146
193
|
* 階乗を計算する \
|
|
147
194
|
* 参考: https://qiita.com/AkariLuminous/items/1b2e964ebabde9419224
|
|
148
|
-
* @param
|
|
195
|
+
* @param n 整数
|
|
149
196
|
* @returns 引数の階乗
|
|
150
197
|
*/
|
|
151
198
|
export const factorial = (n: bigint) => {
|
|
152
|
-
if (n < 0n) throw Error(`'
|
|
199
|
+
if (n < 0n) throw Error(`'n' must be non-negative`);
|
|
153
200
|
if (n === 0n) return 1n;
|
|
154
201
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
* @param min 最小値
|
|
158
|
-
* @param max 最大値
|
|
159
|
-
* @returns min 以上 max 未満 の奇数の積
|
|
160
|
-
*/
|
|
161
|
-
const oddProd = (min: bigint, max: bigint): bigint => {
|
|
162
|
-
if (min >= max) return 1n;
|
|
163
|
-
|
|
164
|
-
const max_bits = BigInt((max - 2n).toString(2).length);
|
|
165
|
-
const num_odds = (max - min) / 2n;
|
|
166
|
-
|
|
167
|
-
if (max_bits * num_odds < 63n) {
|
|
168
|
-
let result = min;
|
|
169
|
-
for (let i = min + 2n; i < max; i += 2n) {
|
|
170
|
-
result *= i;
|
|
171
|
-
}
|
|
172
|
-
return result;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const mid = (min + num_odds) | 1n;
|
|
176
|
-
const lower = oddProd(min, mid);
|
|
177
|
-
const higher = oddProd(mid, max);
|
|
178
|
-
return lower * higher;
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* 階乗の奇数部分を計算する
|
|
183
|
-
* @param n 整数
|
|
184
|
-
* @returns 奇数部の積
|
|
185
|
-
*/
|
|
186
|
-
const oddPart = (n: bigint) => {
|
|
187
|
-
let L_i = 3n,
|
|
188
|
-
result = 1n,
|
|
189
|
-
tmp = 1n;
|
|
190
|
-
const m = BigInt(n.toString(2).length) - 1n;
|
|
191
|
-
|
|
192
|
-
for (let i = m - 1n; i > -1n; --i) {
|
|
193
|
-
const U_i = ((n >> i) + 1n) | 1n;
|
|
194
|
-
|
|
195
|
-
tmp *= oddProd(L_i, U_i);
|
|
196
|
-
L_i = U_i;
|
|
197
|
-
result *= tmp;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return result;
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
const two_exp = n - BigInt(n.toString(2).match(/1/g)?.length ?? 0);
|
|
204
|
-
const odd_part = oddPart(n);
|
|
202
|
+
const twoExp = n - BigInt(n.toString(2).match(/1/g)?.length ?? 0);
|
|
203
|
+
const odd = oddPart(n);
|
|
205
204
|
|
|
206
|
-
return
|
|
205
|
+
return odd << twoExp;
|
|
207
206
|
};
|
|
208
207
|
|
|
209
208
|
/**
|
|
@@ -223,7 +222,7 @@ export const rot32BI = (value: bigint, rot: bigint) => {
|
|
|
223
222
|
* @returns
|
|
224
223
|
*/
|
|
225
224
|
export const rot32 = (value: number, rot: number) => {
|
|
226
|
-
return (value >>> (rot & 31)) | (value << (-rot & 31));
|
|
225
|
+
return ((value >>> (rot & 31)) | (value << (-rot & 31))) >>> 0;
|
|
227
226
|
};
|
|
228
227
|
|
|
229
228
|
/**
|
package/src/pcg-minimal.ts
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { rot32 } from './math';
|
|
2
2
|
|
|
3
|
+
const __pcg_brand = Symbol();
|
|
4
|
+
|
|
3
5
|
/** シードなし時の静的初期化定数 */
|
|
4
6
|
const initialState = [0x853c49e6748fea9bn, 0xda3e39cb94b95bdbn] as const;
|
|
5
7
|
|
|
6
8
|
/** 乗数 */
|
|
7
|
-
const
|
|
9
|
+
const multiplier = 0x5851f42d4c957f2dn;
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* PCG-XSH-RR (Permuted congruential generator) 乱数のクラス
|
|
11
13
|
*/
|
|
12
14
|
export default class PCGMinimal {
|
|
15
|
+
/**
|
|
16
|
+
* [state, increment]
|
|
17
|
+
*/
|
|
13
18
|
readonly #state = new BigUint64Array(2);
|
|
14
|
-
|
|
15
|
-
get [Symbol.toStringTag]() {
|
|
16
|
-
return PCGMinimal.name;
|
|
17
|
-
}
|
|
19
|
+
readonly [__pcg_brand]: unknown;
|
|
18
20
|
|
|
19
21
|
/** シード値の配列を返す */
|
|
20
22
|
static getSeed() {
|
|
@@ -25,7 +27,6 @@ export default class PCGMinimal {
|
|
|
25
27
|
* @param seeds 64bit整数の配列 (長さ2以上), 省略した場合, 常に同じ値によって初期化される
|
|
26
28
|
*/
|
|
27
29
|
constructor(seeds?: BigUint64Array<ArrayBuffer>) {
|
|
28
|
-
|
|
29
30
|
if (seeds && seeds[0] && seeds[1]) {
|
|
30
31
|
this.#state[1] = (seeds[1] << 1n) | 1n;
|
|
31
32
|
this.step();
|
|
@@ -40,7 +41,7 @@ export default class PCGMinimal {
|
|
|
40
41
|
/** 内部状態を1サイクル進める */
|
|
41
42
|
step() {
|
|
42
43
|
if (this.#state[0] && this.#state[1]) {
|
|
43
|
-
this.#state[0] = this.#state[0] *
|
|
44
|
+
this.#state[0] = this.#state[0] * multiplier + this.#state[1];
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
|
|
@@ -61,12 +62,12 @@ export default class PCGMinimal {
|
|
|
61
62
|
return this.value;
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
/** `bound`
|
|
65
|
+
/** `bound` 未満の乱数を返す */
|
|
65
66
|
getBoundedRand(bound: number) {
|
|
66
67
|
/** 32bit 上限 */
|
|
67
68
|
const limit = 0x100000000;
|
|
68
69
|
|
|
69
|
-
if (bound > limit) throw Error('bound exceeded limit (2^32)');
|
|
70
|
+
if (bound > limit) throw Error('`bound` exceeded limit (2^32)');
|
|
70
71
|
|
|
71
72
|
const threshold = limit % bound;
|
|
72
73
|
|
|
@@ -77,13 +78,13 @@ export default class PCGMinimal {
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
/**
|
|
80
|
-
* step
|
|
81
|
+
* step の値だけ乱数を生成する
|
|
81
82
|
* @param step
|
|
82
83
|
* @param bound
|
|
83
84
|
*/
|
|
84
|
-
|
|
85
|
+
*genRands(step: number, bound?: number) {
|
|
85
86
|
for (let i = 0; i < step; i++) {
|
|
86
|
-
yield bound ? this.getBoundedRand(bound) : this.getRand();
|
|
87
|
+
yield typeof bound === 'number' ? this.getBoundedRand(bound) : this.getRand();
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
}
|
package/src/util.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
/**
|
|
3
2
|
* 配列が等しいかどうかの真偽値を返す
|
|
4
3
|
* @returns
|
|
@@ -83,9 +82,8 @@ export const parseCSV = (csv: string) => {
|
|
|
83
82
|
*/
|
|
84
83
|
export const getHash = async (str: string, algorithm: AlgorithmIdentifier) => {
|
|
85
84
|
const utf8 = Buffer.from(str, 'utf8');
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
.then((hash) => Buffer.from(hash));
|
|
85
|
+
const hash = await crypto.subtle.digest(algorithm, utf8);
|
|
86
|
+
return Buffer.from(hash);
|
|
89
87
|
};
|
|
90
88
|
|
|
91
89
|
export const BItoBuffer = (n: bigint) => {
|