JavaScript-QuickJS
view release on metacpan or search on metacpan
quickjs/libbf.c view on Meta::CPAN
return FALSE;
bit_pos = a->len * LIMB_BITS - 1 - prec;
n = k - prec;
/* bit pattern for RNDN or RNDNA: 0111.. or 1000...
for other rounding modes: 000... or 111...
*/
bit = get_bit(a->tab, a->len, bit_pos);
bit_pos--;
n--;
bit ^= is_rndn;
/* XXX: slow, but a few iterations on average */
while (n != 0) {
if (get_bit(a->tab, a->len, bit_pos) != bit)
return TRUE;
bit_pos--;
n--;
}
return FALSE;
}
/* Cannot fail with BF_ST_MEM_ERROR. */
quickjs/libbf.c view on Meta::CPAN
if (bf_cmp_lt(T, U)) {
T->expn++;
n--;
}
bf_delete(U);
}
// printf("n=%ld\n", n);
// bf_print_str("T", T);
/* XXX: precision analysis */
/* number of iterations for argument reduction 2 */
K = bf_isqrt((prec + 1) / 2);
/* order of Taylor expansion */
l = prec / (2 * K) + 1;
/* precision of the intermediate computations */
prec1 = prec + K + 2 * l + 32;
bf_init(s, U);
bf_init(s, V);
/* Note: cancellation occurs here, so we use more precision (XXX:
quickjs/qjscalc.js view on Meta::CPAN
}
str1 += "X";
if (i != 1) {
str1 += "^" + i;
}
}
return str1;
}
/* find one complex root of 'p' starting from z at precision eps using
at most max_it iterations. Return null if could not find root. */
function poly_root_laguerre1(p, z, max_it)
{
var p1, p2, i, z0, z1, z2, d, t0, t1, d1, d2, e, el, zl;
d = p.deg();
if (d == 1) {
/* monomial case */
return -p[0] / p[1];
}
/* trivial zero */
quickjs/quickjs.c view on Meta::CPAN
static int64_t days_in_year(int64_t y) {
return 365 + !(y % 4) - !(y % 100) + !(y % 400);
}
/* return the year, update days */
static int64_t year_from_days(int64_t *days) {
int64_t y, d1, nd, d = *days;
y = floor_div(d * 10000, 3652425) + 1970;
/* the initial approximation is very good, so only a few
iterations are necessary */
for(;;) {
d1 = d - days_from_year(y);
if (d1 < 0) {
y--;
d1 += days_in_year(y);
} else {
nd = days_in_year(y);
if (d1 < nd)
break;
d1 -= nd;
quickjs/tests/microbench.js view on Meta::CPAN
a = toPrec(a, precs[i]);
s += pad_left(a, widths[i]);
} else {
s += pad_left(a, widths[i]);
}
}
console.log(s);
}
var clocks_per_sec = 1000;
var max_iterations = 10;
var clock_threshold = 100; /* favoring short measuring spans */
var min_n_argument = 1;
//var get_clock = Date.now;
var get_clock = os.now;
function log_one(text, n, ti) {
var ref;
if (ref_data)
ref = ref_data[text];
quickjs/tests/microbench.js view on Meta::CPAN
var i, j, n, t, t1, ti, nb_its, ref, ti_n, ti_n1, min_ti;
nb_its = n = 1;
if (f.bench) {
ti_n = f(text);
} else {
ti_n = 1000000000;
min_ti = clock_threshold / 10;
for(i = 0; i < 30; i++) {
ti = 1000000000;
for (j = 0; j < max_iterations; j++) {
t = get_clock();
while ((t1 = get_clock()) == t)
continue;
nb_its = f(n);
if (nb_its < 0)
return; // test failure
t1 = get_clock() - t1;
if (ti > t1)
ti = t1;
}
( run in 0.639 second using v1.01-cache-2.11-cpan-71847e10f99 )