mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-13 06:51:34 +00:00
Use mixed Horner scheme in Math.exp/expm1 to improve instruction parallelization (#311)
This commit is contained in:
@ -422,8 +422,10 @@ export namespace NativeMath {
|
||||
} else if (hx > 0x3E300000) {
|
||||
hi = x;
|
||||
} else return 1.0 + x;
|
||||
var xx = x * x;
|
||||
var c = x - xx * (P1 + xx * (P2 + xx * (P3 + xx * (P4 + xx * P5))));
|
||||
var xs = x * x;
|
||||
// var c = x - xp2 * (P1 + xp2 * (P2 + xp2 * (P3 + xp2 * (P4 + xp2 * P5))));
|
||||
var xq = xs * xs;
|
||||
var c = x - (xs * P1 + xq * ((P2 + xs * P3) + xq * (P4 + xs * P5)));
|
||||
var y = 1.0 + (x * c / (2 - c) - lo + hi);
|
||||
if (k == 0) return y;
|
||||
return scalbn(y, k);
|
||||
@ -464,7 +466,9 @@ export namespace NativeMath {
|
||||
} else if (hx < 0x3C900000) return x;
|
||||
var hfx = 0.5 * x;
|
||||
var hxs = x * hfx;
|
||||
var r1 = 1.0 + hxs * (Q1 + hxs * (Q2 + hxs * (Q3 + hxs * (Q4 + hxs * Q5))));
|
||||
// var r1 = 1.0 + hxs * (Q1 + hxs * (Q2 + hxs * (Q3 + hxs * (Q4 + hxs * Q5))));
|
||||
var hxq = hxs * hxs;
|
||||
var r1 = (1.0 + hxs * Q1) + hxq * ((Q2 + hxs * Q3) + hxq * (Q4 + hxs * Q5));
|
||||
t = 3.0 - r1 * hfx;
|
||||
var e = hxs * ((r1 - t) / (6.0 - x * t));
|
||||
if (k == 0) return x - (x * e - hxs);
|
||||
|
Reference in New Issue
Block a user