squint-cljs 0.10.185 → 0.11.187
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 +5 -4
- package/lib/cli.js +46 -46
- package/lib/cljs.pprint.js +229 -229
- package/lib/compiler.js +1189 -1144
- package/lib/compiler.node.js +26 -24
- package/lib/compiler.sci.js +1097 -1097
- package/lib/node.nrepl_server.js +16 -16
- package/lib/squint.core.umd.js +1 -1
- package/package.json +5 -2
- package/src/squint/core.js +8 -0
- package/src/squint/math.js +608 -0
- package/src/squint/test.mjs +503 -0
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
import * as core from "./core.js";
|
|
2
|
+
export const E = Math.E;
|
|
3
|
+
export const PI = Math.PI;
|
|
4
|
+
export const DEGREES_TO_RADIANS = 0.017453292519943295;
|
|
5
|
+
export const RADIANS_TO_DEGREES = 57.29577951308232;
|
|
6
|
+
export const TWO_TO_THE_52 = 4503599627370496;
|
|
7
|
+
export const SIGNIFICAND_WIDTH32 = 21;
|
|
8
|
+
export const EXP_BIAS = 1023;
|
|
9
|
+
export const EXP_BITMASK32 = 2146435072;
|
|
10
|
+
export const EXP_MAX = 1023;
|
|
11
|
+
export const EXP_MIN = -1022;
|
|
12
|
+
export function get_little_endian() {
|
|
13
|
+
var a = new ArrayBuffer(4);
|
|
14
|
+
var i = new Uint32Array(a);
|
|
15
|
+
var b = new Uint8Array(a);
|
|
16
|
+
i[0] = 857870592;
|
|
17
|
+
return b[0] === 0;
|
|
18
|
+
}
|
|
19
|
+
export const little_endian_QMARK_ = get_little_endian();
|
|
20
|
+
export const HI = little_endian_QMARK_ ? 1 : 0;
|
|
21
|
+
export const LO = 1 - HI;
|
|
22
|
+
export const INT32_MASK = 4294967295;
|
|
23
|
+
export const INT32_NON_SIGN_BIT = 2147483648;
|
|
24
|
+
export const INT32_NON_SIGN_BITS = 2147483647;
|
|
25
|
+
export function u_LT_(a, b) {
|
|
26
|
+
var ab = a >>> 28;
|
|
27
|
+
var bb = b >>> 28;
|
|
28
|
+
return ab < bb || ab === bb && (a & 268435455) < (b & 268435455);
|
|
29
|
+
}
|
|
30
|
+
export function sin(a) {
|
|
31
|
+
return Math.sin(a);
|
|
32
|
+
}
|
|
33
|
+
export function cos(a) {
|
|
34
|
+
return Math.cos(a);
|
|
35
|
+
}
|
|
36
|
+
export function tan(a) {
|
|
37
|
+
return Math.tan(a);
|
|
38
|
+
}
|
|
39
|
+
export function asin(a) {
|
|
40
|
+
return Math.asin(a);
|
|
41
|
+
}
|
|
42
|
+
export function acos(a) {
|
|
43
|
+
return Math.acos(a);
|
|
44
|
+
}
|
|
45
|
+
export function atan(a) {
|
|
46
|
+
return Math.atan(a);
|
|
47
|
+
}
|
|
48
|
+
export function to_radians(deg) {
|
|
49
|
+
return deg * 0.017453292519943295;
|
|
50
|
+
}
|
|
51
|
+
export function to_degrees(r) {
|
|
52
|
+
return r * 57.29577951308232;
|
|
53
|
+
}
|
|
54
|
+
export function exp(a) {
|
|
55
|
+
return Math.exp(a);
|
|
56
|
+
}
|
|
57
|
+
export function log(a) {
|
|
58
|
+
return Math.log(a);
|
|
59
|
+
}
|
|
60
|
+
export function log10(a) {
|
|
61
|
+
return Math.log10(a);
|
|
62
|
+
}
|
|
63
|
+
export function sqrt(a) {
|
|
64
|
+
return Math.sqrt(a);
|
|
65
|
+
}
|
|
66
|
+
export function cbrt(a) {
|
|
67
|
+
return Math.cbrt(a);
|
|
68
|
+
}
|
|
69
|
+
export function fabs(x) {
|
|
70
|
+
var a = new ArrayBuffer(8);
|
|
71
|
+
var d = new Float64Array(a);
|
|
72
|
+
var i = new Uint32Array(a);
|
|
73
|
+
var hi = little_endian_QMARK_ ? 1 : 0;
|
|
74
|
+
d[0] = x;
|
|
75
|
+
i[hi] = i[hi] & 2147483647;
|
|
76
|
+
return d[0];
|
|
77
|
+
}
|
|
78
|
+
export const Zero = function() {
|
|
79
|
+
var a = new ArrayBuffer(16);
|
|
80
|
+
var d = new Float64Array(a);
|
|
81
|
+
var b = new Uint8Array(a);
|
|
82
|
+
d[0] = 0;
|
|
83
|
+
d[1] = 0;
|
|
84
|
+
b[little_endian_QMARK_ ? 15 : 8] = -128;
|
|
85
|
+
return d;
|
|
86
|
+
}();
|
|
87
|
+
export const xpos = 0;
|
|
88
|
+
export const ypos = 1;
|
|
89
|
+
export const HI_x = 2 * 0 + HI;
|
|
90
|
+
export const LO_x = 2 * 0 + LO;
|
|
91
|
+
export const HI_y = 2 * 1 + HI;
|
|
92
|
+
export const LO_y = 2 * 1 + LO;
|
|
93
|
+
export function ilogb(hx, lx) {
|
|
94
|
+
if (hx < 1048576) {
|
|
95
|
+
var hx_zero_QMARK_ = hx === 0;
|
|
96
|
+
var start_ix = hx_zero_QMARK_ ? -1043 : -1022;
|
|
97
|
+
var start_i = hx_zero_QMARK_ ? lx : hx << 11;
|
|
98
|
+
var ix = start_ix;
|
|
99
|
+
var i = start_i;
|
|
100
|
+
while (true) {
|
|
101
|
+
if (!(i > 0)) {
|
|
102
|
+
return ix;
|
|
103
|
+
} else {
|
|
104
|
+
var G__50301 = ix - 1;
|
|
105
|
+
var G__50302 = i << 1;
|
|
106
|
+
ix = G__50301;
|
|
107
|
+
i = G__50302;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
return (hx >> 20) - 1023;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export function setup_hl(i, h, l) {
|
|
117
|
+
if (i >= -1022) {
|
|
118
|
+
return [1048576 | 1048575 & h, l];
|
|
119
|
+
} else {
|
|
120
|
+
var n = -1022 - i;
|
|
121
|
+
if (n <= 31) {
|
|
122
|
+
return [h << n | l >>> 32 - n, l << n];
|
|
123
|
+
} else {
|
|
124
|
+
return [l << n - 32, 0];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export function IEEE_fmod(x, y) {
|
|
129
|
+
if (y === 0 || (isNaN(y) || !isFinite(x))) {
|
|
130
|
+
return NaN;
|
|
131
|
+
} else {
|
|
132
|
+
var a = new ArrayBuffer(16);
|
|
133
|
+
var d = new Float64Array(a);
|
|
134
|
+
var i = new Uint32Array(a);
|
|
135
|
+
var _ = d[0] = x;
|
|
136
|
+
var ___$1 = d[1] = y;
|
|
137
|
+
var hx = i[HI_x];
|
|
138
|
+
var lx = i[LO_x];
|
|
139
|
+
var hy = i[HI_y];
|
|
140
|
+
var ly = i[LO_y];
|
|
141
|
+
var sx = hx & 2147483648;
|
|
142
|
+
var hx__$1 = hx & 2147483647;
|
|
143
|
+
var hy__$1 = hy & 2147483647;
|
|
144
|
+
var hx_LT__EQ_hy = hx__$1 <= hy__$1;
|
|
145
|
+
if (hx_LT__EQ_hy && (hx__$1 < hy__$1 || lx < ly)) {
|
|
146
|
+
return x;
|
|
147
|
+
} else {
|
|
148
|
+
if (hx_LT__EQ_hy && lx === ly) {
|
|
149
|
+
return Zero[sx >>> 31];
|
|
150
|
+
} else {
|
|
151
|
+
try {
|
|
152
|
+
var ix = ilogb(hx__$1, lx);
|
|
153
|
+
var iy = ilogb(hy__$1, ly);
|
|
154
|
+
const [hx__$2, lx__$1] = setup_hl(ix, hx__$1, lx);
|
|
155
|
+
const [hy__$2, ly__$1] = setup_hl(iy, hy__$1, ly);
|
|
156
|
+
const [hx__$3, lx__$2] = function() {
|
|
157
|
+
var n2 = ix - iy;
|
|
158
|
+
var hx__$32 = hx__$2;
|
|
159
|
+
var lx__$22 = lx__$1;
|
|
160
|
+
while (true) {
|
|
161
|
+
if (n2 === 0) {
|
|
162
|
+
return [hx__$32, lx__$22];
|
|
163
|
+
} else {
|
|
164
|
+
var hz2 = u_LT_(lx__$22, ly__$1) ? hx__$32 - hy__$2 - 1 : hx__$32 - hy__$2;
|
|
165
|
+
var lz2 = lx__$22 - ly__$1;
|
|
166
|
+
const [hx__$42, lx__$32] = hz2 < 0 ? [hx__$32 + hx__$32 + (lx__$22 >>> 31), lx__$22 + lx__$22] : (hz2 | lz2) === 0 ? function() {
|
|
167
|
+
throw new Error("Signed zero");
|
|
168
|
+
}() : [hz2 + hz2 + (lz2 >>> 31), lz2 + lz2];
|
|
169
|
+
var G__50303 = n2 - 1;
|
|
170
|
+
var G__50304 = 4294967295 & hx__$42;
|
|
171
|
+
var G__50305 = 4294967295 & lx__$32;
|
|
172
|
+
n2 = G__50303;
|
|
173
|
+
hx__$32 = G__50304;
|
|
174
|
+
lx__$22 = G__50305;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
}();
|
|
180
|
+
var hz = u_LT_(lx__$2, ly__$1) ? hx__$3 - hy__$2 - 1 : hx__$3 - hy__$2;
|
|
181
|
+
var lz = lx__$2 - ly__$1;
|
|
182
|
+
const [hx__$4, lx__$3] = hz >= 0 ? [hz, lz] : [hx__$3, lx__$2];
|
|
183
|
+
if ((hx__$4 | lx__$3) === 0) {
|
|
184
|
+
throw new Error("Signed zero");
|
|
185
|
+
}
|
|
186
|
+
const [hx__$5, lx__$4, iy__$1] = function() {
|
|
187
|
+
var hx__$52 = hx__$4;
|
|
188
|
+
var lx__$42 = lx__$3;
|
|
189
|
+
var iy__$12 = iy;
|
|
190
|
+
while (true) {
|
|
191
|
+
if (!(hx__$52 < 1048576)) {
|
|
192
|
+
return [hx__$52, lx__$42, iy__$12];
|
|
193
|
+
} else {
|
|
194
|
+
var G__50306 = hx__$52 + hx__$52 + (lx__$42 >>> 31);
|
|
195
|
+
var G__50307 = lx__$42 + lx__$42;
|
|
196
|
+
var G__50308 = iy__$12 - 1;
|
|
197
|
+
hx__$52 = G__50306;
|
|
198
|
+
lx__$42 = G__50307;
|
|
199
|
+
iy__$12 = G__50308;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
}();
|
|
205
|
+
if (iy__$1 >= -1022) {
|
|
206
|
+
var hx__$6 = hx__$5 - 1048576 | iy__$1 + 1023 << 20;
|
|
207
|
+
i[HI_x] = hx__$6 | sx;
|
|
208
|
+
i[LO_x] = lx__$4;
|
|
209
|
+
return d[0];
|
|
210
|
+
} else {
|
|
211
|
+
var n = -1022 - iy__$1;
|
|
212
|
+
const [hx__$6, lx__$5] = n <= 20 ? [hx__$5 >> n, lx__$4 >>> n | hx__$5 << 32 - n] : n <= 31 ? [sx, hx__$5 << 32 - n | lx__$4 >>> n] : [sx, hx__$5 >> n - 32];
|
|
213
|
+
i[HI_x] = hx__$6 | sx;
|
|
214
|
+
i[LO_x] = lx__$5;
|
|
215
|
+
return d[0] * 1;
|
|
216
|
+
}
|
|
217
|
+
} catch (e50260) {
|
|
218
|
+
var ___$2 = e50260;
|
|
219
|
+
return Zero[sx >>> 31];
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
export function IEEE_remainder(dividend, divisor) {
|
|
226
|
+
if (divisor === 0) {
|
|
227
|
+
return NaN;
|
|
228
|
+
} else {
|
|
229
|
+
if (isNaN(divisor)) {
|
|
230
|
+
return NaN;
|
|
231
|
+
} else {
|
|
232
|
+
if (isNaN(dividend)) {
|
|
233
|
+
return NaN;
|
|
234
|
+
} else {
|
|
235
|
+
if (!isFinite(dividend)) {
|
|
236
|
+
return NaN;
|
|
237
|
+
} else {
|
|
238
|
+
if (!isFinite(divisor)) {
|
|
239
|
+
return dividend;
|
|
240
|
+
} else {
|
|
241
|
+
var a = new ArrayBuffer(16);
|
|
242
|
+
var d = new Float64Array(a);
|
|
243
|
+
var i = new Uint32Array(a);
|
|
244
|
+
d[0] = dividend;
|
|
245
|
+
d[1] = divisor;
|
|
246
|
+
var hx = i[HI];
|
|
247
|
+
var lx = i[LO];
|
|
248
|
+
var hp = i[HI + 2];
|
|
249
|
+
var lp = i[LO + 2];
|
|
250
|
+
var sx = hx & 2147483648;
|
|
251
|
+
var hp__$1 = hp & 2147483647;
|
|
252
|
+
var hx__$1 = hx & 2147483647;
|
|
253
|
+
var dividend__$1 = hp__$1 <= 2145386495 ? IEEE_fmod(dividend, divisor + divisor) : dividend;
|
|
254
|
+
if ((hx__$1 - hp__$1 | lx - lp) === 0) {
|
|
255
|
+
return 0 * dividend__$1;
|
|
256
|
+
} else {
|
|
257
|
+
var dividend__$2 = Math.abs(dividend__$1);
|
|
258
|
+
var divisor__$1 = Math.abs(divisor);
|
|
259
|
+
var dividend__$3 = hp__$1 < 2097152 ? dividend__$2 + dividend__$2 > divisor__$1 ? function() {
|
|
260
|
+
var dividend__$32 = dividend__$2 - divisor__$1;
|
|
261
|
+
if (dividend__$32 + dividend__$32 >= divisor__$1) {
|
|
262
|
+
return dividend__$32 - divisor__$1;
|
|
263
|
+
} else {
|
|
264
|
+
return dividend__$32;
|
|
265
|
+
}
|
|
266
|
+
}() : dividend__$2 : function() {
|
|
267
|
+
var divisor_half = 0.5 * divisor__$1;
|
|
268
|
+
if (dividend__$2 > divisor_half) {
|
|
269
|
+
var dividend__$32 = dividend__$2 - divisor__$1;
|
|
270
|
+
if (dividend__$32 >= divisor_half) {
|
|
271
|
+
return dividend__$32 - divisor__$1;
|
|
272
|
+
} else {
|
|
273
|
+
return dividend__$32;
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
return dividend__$2;
|
|
277
|
+
}
|
|
278
|
+
}();
|
|
279
|
+
d[0] = dividend__$3;
|
|
280
|
+
var hx__$2 = i[HI] ^ sx;
|
|
281
|
+
i[HI] = hx__$2;
|
|
282
|
+
return d[0];
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
export function ceil(a) {
|
|
291
|
+
if (!(a == null)) {
|
|
292
|
+
return Math.ceil(a);
|
|
293
|
+
} else {
|
|
294
|
+
throw new Error("Unexpected Null passed to ceil");
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
export function floor(a) {
|
|
298
|
+
if (!(a == null)) {
|
|
299
|
+
return Math.floor(a);
|
|
300
|
+
} else {
|
|
301
|
+
throw new Error("Unexpected Null passed to floor");
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
export function copy_sign(magnitude, sign) {
|
|
305
|
+
var a = new ArrayBuffer(16);
|
|
306
|
+
var d = new Float64Array(a);
|
|
307
|
+
var b = new Uint8Array(a);
|
|
308
|
+
var sbyte = little_endian_QMARK_ ? 7 : 0;
|
|
309
|
+
d[0] = magnitude;
|
|
310
|
+
d[1] = sign;
|
|
311
|
+
var sign_sbyte = 128 & b[8 + sbyte];
|
|
312
|
+
var mag_sbyte = 127 & b[sbyte];
|
|
313
|
+
b[sbyte] = sign_sbyte | mag_sbyte;
|
|
314
|
+
return d[0];
|
|
315
|
+
}
|
|
316
|
+
export function rint(a) {
|
|
317
|
+
var sign = copy_sign(1, a);
|
|
318
|
+
var a__$1 = Math.abs(a);
|
|
319
|
+
var a__$2 = a__$1 < 4503599627370496 ? 4503599627370496 + a__$1 - 4503599627370496 : a__$1;
|
|
320
|
+
return sign * a__$2;
|
|
321
|
+
}
|
|
322
|
+
export function atan2(y, x) {
|
|
323
|
+
return Math.atan2(y, x);
|
|
324
|
+
}
|
|
325
|
+
export function pow(a, b) {
|
|
326
|
+
return Math.pow(a, b);
|
|
327
|
+
}
|
|
328
|
+
export function round(a) {
|
|
329
|
+
if (isNaN(a)) {
|
|
330
|
+
return 0;
|
|
331
|
+
} else {
|
|
332
|
+
if (isFinite(a)) {
|
|
333
|
+
return Math.round(a);
|
|
334
|
+
} else {
|
|
335
|
+
if (Infinity === a) {
|
|
336
|
+
return Number.MAX_SAFE_INTEGER;
|
|
337
|
+
} else {
|
|
338
|
+
return Number.MIN_SAFE_INTEGER;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
export function random() {
|
|
344
|
+
return Math.random();
|
|
345
|
+
}
|
|
346
|
+
export function add_exact(x, y) {
|
|
347
|
+
var r = x + y;
|
|
348
|
+
if (r > Number.MAX_SAFE_INTEGER || r < Number.MIN_SAFE_INTEGER) {
|
|
349
|
+
throw new Error("Integer overflow");
|
|
350
|
+
} else {
|
|
351
|
+
return r;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
export function subtract_exact(x, y) {
|
|
355
|
+
var r = x - y;
|
|
356
|
+
if (r > Number.MAX_SAFE_INTEGER || r < Number.MIN_SAFE_INTEGER) {
|
|
357
|
+
throw new Error("Integer overflow");
|
|
358
|
+
} else {
|
|
359
|
+
return r;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
export function multiply_exact(x, y) {
|
|
363
|
+
var r = x * y;
|
|
364
|
+
if (r > Number.MAX_SAFE_INTEGER || r < Number.MIN_SAFE_INTEGER) {
|
|
365
|
+
throw new Error("Integer overflow");
|
|
366
|
+
} else {
|
|
367
|
+
return r;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
export function increment_exact(a) {
|
|
371
|
+
if (a >= Number.MAX_SAFE_INTEGER || a < Number.MIN_SAFE_INTEGER) {
|
|
372
|
+
throw new Error("Integer overflow");
|
|
373
|
+
} else {
|
|
374
|
+
return a + 1;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
export function decrement_exact(a) {
|
|
378
|
+
if (a <= Number.MIN_SAFE_INTEGER || a > Number.MAX_SAFE_INTEGER) {
|
|
379
|
+
throw new Error("Integer overflow");
|
|
380
|
+
} else {
|
|
381
|
+
return a - 1;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
export function negate_exact(a) {
|
|
385
|
+
if (a > Number.MAX_SAFE_INTEGER || a < Number.MIN_SAFE_INTEGER) {
|
|
386
|
+
throw new Error("Integer overflow");
|
|
387
|
+
} else {
|
|
388
|
+
return -a;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
export function xor(a, b) {
|
|
392
|
+
return a && !b || !a && b;
|
|
393
|
+
}
|
|
394
|
+
export function floor_div(x, y) {
|
|
395
|
+
if (!(Number.isSafeInteger(x) && Number.isSafeInteger(y))) {
|
|
396
|
+
throw new Error("floor-div called with non-safe-integer arguments");
|
|
397
|
+
} else {
|
|
398
|
+
var r = core.long$(x / y);
|
|
399
|
+
if (xor(x < 0, y < 0) && !(r * y === x)) {
|
|
400
|
+
return r - 1;
|
|
401
|
+
} else {
|
|
402
|
+
return r;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
export function floor_mod(x, y) {
|
|
407
|
+
if (!(Number.isSafeInteger(x) && Number.isSafeInteger(y))) {
|
|
408
|
+
throw new Error("floor-mod called with non-safe-integer arguments");
|
|
409
|
+
} else {
|
|
410
|
+
var r = core.long$(x / y);
|
|
411
|
+
if (xor(x < 0, y < 0) && !(r * y === x)) {
|
|
412
|
+
return x - y * r - -y;
|
|
413
|
+
} else {
|
|
414
|
+
return x - y * r;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
export function get_exponent(d) {
|
|
419
|
+
if (isNaN(d) || !isFinite(d)) {
|
|
420
|
+
return EXP_MAX + 1;
|
|
421
|
+
} else {
|
|
422
|
+
if (d === 0) {
|
|
423
|
+
return -1022 - 1;
|
|
424
|
+
} else {
|
|
425
|
+
var a = new ArrayBuffer(8);
|
|
426
|
+
var f = new Float64Array(a);
|
|
427
|
+
var i = new Uint32Array(a);
|
|
428
|
+
var hi = little_endian_QMARK_ ? 1 : 0;
|
|
429
|
+
f[0] = d;
|
|
430
|
+
return ((i[hi] & 2146435072) >> 21 - 1) - 1023;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
export function hi_lo__GT_double(h, l) {
|
|
435
|
+
var a = new ArrayBuffer(8);
|
|
436
|
+
var f = new Float64Array(a);
|
|
437
|
+
var i = new Uint32Array(a);
|
|
438
|
+
i[LO] = l;
|
|
439
|
+
i[HI] = h;
|
|
440
|
+
return f[0];
|
|
441
|
+
}
|
|
442
|
+
export function power_of_two(n) {
|
|
443
|
+
if (n >= -1022 && n <= EXP_MAX) {
|
|
444
|
+
} else {
|
|
445
|
+
throw new Error("Assert failed: (and (>= n EXP-MIN) (<= n EXP-MAX))");
|
|
446
|
+
}
|
|
447
|
+
return hi_lo__GT_double(n + 1023 << 21 - 1 & 2146435072, 0);
|
|
448
|
+
}
|
|
449
|
+
export function ulp(d) {
|
|
450
|
+
if (isNaN(d)) {
|
|
451
|
+
return d;
|
|
452
|
+
} else {
|
|
453
|
+
if (isFinite(d)) {
|
|
454
|
+
var e = get_exponent(d);
|
|
455
|
+
var G__50285 = e;
|
|
456
|
+
switch (G__50285) {
|
|
457
|
+
case 1024:
|
|
458
|
+
return Math.abs(d);
|
|
459
|
+
break;
|
|
460
|
+
case -1023:
|
|
461
|
+
return Number.MIN_VALUE;
|
|
462
|
+
break;
|
|
463
|
+
default:
|
|
464
|
+
var e__$1 = e - (31 + 21);
|
|
465
|
+
if (e__$1 >= -1022) {
|
|
466
|
+
return power_of_two(e__$1);
|
|
467
|
+
} else {
|
|
468
|
+
var shift = e__$1 - (-1022 - 31 - 21);
|
|
469
|
+
if (shift < 32) {
|
|
470
|
+
return hi_lo__GT_double(0, 1 << shift);
|
|
471
|
+
} else {
|
|
472
|
+
return hi_lo__GT_double(1 << shift - 32, 0);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
} else {
|
|
477
|
+
return Infinity;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
export function signum(d) {
|
|
482
|
+
if (d === 0 || isNaN(d)) {
|
|
483
|
+
return d;
|
|
484
|
+
} else {
|
|
485
|
+
return copy_sign(1, d);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
export function sinh(x) {
|
|
489
|
+
return Math.sinh(x);
|
|
490
|
+
}
|
|
491
|
+
export function cosh(x) {
|
|
492
|
+
return Math.cosh(x);
|
|
493
|
+
}
|
|
494
|
+
export function tanh(x) {
|
|
495
|
+
return Math.tanh(x);
|
|
496
|
+
}
|
|
497
|
+
export function hypot(x, y) {
|
|
498
|
+
return Math.hypot(x, y);
|
|
499
|
+
}
|
|
500
|
+
export function expm1(x) {
|
|
501
|
+
return Math.expm1(x);
|
|
502
|
+
}
|
|
503
|
+
export function log1p(x) {
|
|
504
|
+
return Math.log1p(x);
|
|
505
|
+
}
|
|
506
|
+
export function add64(hx, lx, hy, ly) {
|
|
507
|
+
var sx = (lx & 2147483648) >>> 31;
|
|
508
|
+
var sy = (ly & 2147483648) >>> 31;
|
|
509
|
+
var lr = (2147483647 & lx) + (2147483647 & ly);
|
|
510
|
+
var c31 = (lr & 2147483648) >>> 31;
|
|
511
|
+
var b31 = sx + sy + c31;
|
|
512
|
+
var lr__$1 = lr & 2147483647 | b31 << 31;
|
|
513
|
+
var c32 = b31 >> 1;
|
|
514
|
+
var hr = 4294967295 & hx + hy + c32;
|
|
515
|
+
return [hr, lr__$1];
|
|
516
|
+
}
|
|
517
|
+
export function next_after(start, direction) {
|
|
518
|
+
var a = new ArrayBuffer(8);
|
|
519
|
+
var f = new Float64Array(a);
|
|
520
|
+
var i = new Uint32Array(a);
|
|
521
|
+
if (start > direction) {
|
|
522
|
+
if (!(start === 0)) {
|
|
523
|
+
var _ = f[0] = start;
|
|
524
|
+
var ht = i[HI];
|
|
525
|
+
var lt = i[LO];
|
|
526
|
+
const [hr, lr] = (ht & 2147483648) === 0 ? add64(ht, lt, 4294967295, 4294967295) : add64(ht, lt, 0, 1);
|
|
527
|
+
i[HI] = hr;
|
|
528
|
+
i[LO] = lr;
|
|
529
|
+
return f[0];
|
|
530
|
+
} else {
|
|
531
|
+
return -Number.MIN_VALUE;
|
|
532
|
+
}
|
|
533
|
+
} else {
|
|
534
|
+
if (start < direction) {
|
|
535
|
+
var _ = f[0] = start + 0;
|
|
536
|
+
var ht = i[HI];
|
|
537
|
+
var lt = i[LO];
|
|
538
|
+
const [hr, lr] = (ht & 2147483648) === 0 ? add64(ht, lt, 0, 1) : add64(ht, lt, 4294967295, 4294967295);
|
|
539
|
+
i[HI] = hr;
|
|
540
|
+
i[LO] = lr;
|
|
541
|
+
return f[0];
|
|
542
|
+
} else {
|
|
543
|
+
if (start === direction) {
|
|
544
|
+
return direction;
|
|
545
|
+
} else {
|
|
546
|
+
return start + direction;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
export function next_up(d) {
|
|
552
|
+
if (d < Number.POSITIVE_INFINITY) {
|
|
553
|
+
var a = new ArrayBuffer(8);
|
|
554
|
+
var f = new Float64Array(a);
|
|
555
|
+
var i = new Uint32Array(a);
|
|
556
|
+
var _ = f[0] = d + 0;
|
|
557
|
+
var ht = i[HI];
|
|
558
|
+
var lt = i[LO];
|
|
559
|
+
const [hr, lr] = (ht & 2147483648) === 0 ? add64(ht, lt, 0, 1) : add64(ht, lt, 4294967295, 4294967295);
|
|
560
|
+
i[HI] = hr;
|
|
561
|
+
i[LO] = lr;
|
|
562
|
+
return f[0];
|
|
563
|
+
} else {
|
|
564
|
+
return d;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
export function next_down(d) {
|
|
568
|
+
if (isNaN(d) || -Infinity === d) {
|
|
569
|
+
return d;
|
|
570
|
+
} else {
|
|
571
|
+
if (d === 0) {
|
|
572
|
+
return -Number.MIN_VALUE;
|
|
573
|
+
} else {
|
|
574
|
+
var a = new ArrayBuffer(8);
|
|
575
|
+
var f = new Float64Array(a);
|
|
576
|
+
var i = new Uint32Array(a);
|
|
577
|
+
var _ = f[0] = d;
|
|
578
|
+
var ht = i[HI];
|
|
579
|
+
var lt = i[LO];
|
|
580
|
+
const [hr, lr] = d > 0 ? add64(ht, lt, 4294967295, 4294967295) : add64(ht, lt, 0, 1);
|
|
581
|
+
i[HI] = hr;
|
|
582
|
+
i[LO] = lr;
|
|
583
|
+
return f[0];
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
export const MAX_SCALE = EXP_MAX + 1022 + 21 + 32 + 1;
|
|
588
|
+
export const two_to_the_double_scale_up = power_of_two(512);
|
|
589
|
+
export const two_to_the_double_scale_down = power_of_two(-512);
|
|
590
|
+
export function scalb(d, scaleFactor) {
|
|
591
|
+
const [scale_factor, scale_increment, exp_delta] = scaleFactor < 0 ? [Math.max(scaleFactor, -MAX_SCALE), -512, two_to_the_double_scale_down] : [Math.min(scaleFactor, MAX_SCALE), 512, two_to_the_double_scale_up];
|
|
592
|
+
var t = scale_factor >> 8 >>> 23;
|
|
593
|
+
var exp_adjust = (scale_factor + t & 511) - t;
|
|
594
|
+
var d__$1 = d * power_of_two(exp_adjust);
|
|
595
|
+
var scale_factor__$1 = scale_factor - exp_adjust;
|
|
596
|
+
while (true) {
|
|
597
|
+
if (scale_factor__$1 === 0) {
|
|
598
|
+
return d__$1;
|
|
599
|
+
} else {
|
|
600
|
+
var G__50310 = d__$1 * exp_delta;
|
|
601
|
+
var G__50311 = scale_factor__$1 - scale_increment;
|
|
602
|
+
d__$1 = G__50310;
|
|
603
|
+
scale_factor__$1 = G__50311;
|
|
604
|
+
continue;
|
|
605
|
+
}
|
|
606
|
+
break;
|
|
607
|
+
}
|
|
608
|
+
}
|