
рдЗрд╕ рд╢рд╛рдВрдд рджрд┐рди, рдореИрдВ рдкреА рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХреБрдЫ рдЕрд╕рдВрдЦреНрдп рдереЗ, рд▓реЗрдХрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рд╕реА рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ
рдкреЛрд╕реНрдЯ рдерд╛ред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рд▓реБрднрд╛рд╡рдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╣реЗрдХреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ js рдкрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рддрд╛рддреНрдХрд╛рд▓рд┐рдХ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдирд┐рдпрдорд┐рдд js рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рдЖрдВрдХрдбрд╝реЗ рджрд┐рдЦрд╛рдП, рдЬрдм 1,000,000 рд╕рдВрдХреЗрдд рдЧрд┐рдирдиреЗ рдореЗрдВ рдХрд╛рдо рд▓рд┐рдпрд╛ ... 48 рд╕реЗрдХрдВрдб (4GHz FF)ред
рдПрд╕реНрдорд╛рдЬ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЦрд┐рд▓рд╡рд╛рдбрд╝ рд╣реБрдЖ рдФрд░ рд╡рд╣ рдХрд┐рди рдкрддреНрдерд░реЛрдВ рд╕реЗ рдорд┐рд▓рд╛, рдЗрд╕рдХрд╛ рдкрддрд╛ рдХрдЯ рдХреЗ рдиреАрдЪреЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдзреАрд░ рдХреЗ рд▓рд┐рдП,
рдкрд░рд┐рдгрд╛рдо рдЬреАрдердм рд╣реИ ред
рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╣рдореЗрдВ рд╕рднреА рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдПрдПрд╕рдПрдо рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдПрдХреНрд╕рдкрдо рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ред рдХреНрдпреЛрдВрдХрд┐ expm рдХреЛ рдЕрдВрджрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреЗрд╡рд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВdouble series (int m, int id) { int k; double ak, eps, p, s, t; double expm (double x, double y); #define eps 1e-17 s = 0.; for (k = 0; k < id; k++){ ak = 8 * k + m; p = id - k; t = expm (p, ak); s = s + t / ak; s = s - (int) s; } for (k = id; k <= id + 100; k++){ ak = 8 * k + m; t = pow (16., (double) (id - k)) / ak; if (t < eps) break; s = s + t; s = s - (int) s; } return s; } double expm (double p, double ak) { int i, j; double p1, pt, r; #define ntp 25 static double tp[ntp]; static int tp1 = 0; if (tp1 == 0) { tp1 = 1; tp[0] = 1.; for (i = 1; i < ntp; i++) tp[i] = 2. * tp[i-1]; } if (ak == 1.) return 0.; for (i = 0; i < ntp; i++) if (tp[i] > p) break; pt = tp[i-1]; p1 = p; r = 1.; for (j = 1; j <= i; j++){ if (p1 >= pt){ r = 16. * r; r = r - (int) (r / ak) * ak; p1 = p1 - pt; } pt = 0.5 * pt; if (pt >= 1.){ r = r * r; r = r - (int) (r / ak) * ak; } } return r; }
рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреБрдЫ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреБрдЫ рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ / рдпрд╛ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдЬрд┐рди рдХреЛрдбреНрд╕ рдХреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рдЙрдирдореЗрдВ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
(function (window) { "use strict";
"TypeError: asm.js рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐: asm.js рдореЙрдбреНрдпреВрд▓ рдХреА рд╡рд╛рдкрд╕реА рдПрдХреНрд╕рдкреЛрд░реНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП" рдХреНрд░реИрд╢ рдХреА рдПрдХ рддреНрд░реБрдЯрд┐ , рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреБрдЫ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛рдПрдВ рд╕рд╣реА рд╣реИрдВред рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж, рдореБрдЭрд╕реЗ рдПрдХ рдЧрд▓рддреА рд╣реБрдИ, рдореИрдВрдиреЗ рдПрдХ рдЕрдВрддрд░ рдЪрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рдЪрд▓ рдЪреБрдХреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА:
function f1(i, d) { i = i | 0;
рдиреБрдХрд╕рд╛рди рдирдВрдмрд░ 1: рдЪрд░ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛рд░реНрдп
рдореИрдВ рдкрд╣рд▓реЗ рд╕рднреА рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рдерд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЙрдиреНрд╣реЗрдВ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рдерд╛ред Asm.js рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХреБрдЫ рдкреЗрдЪреАрджрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрди рд╕рднреА рдЪрд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдХреНрд▓реЛрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЧрдгрд┐рддреАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдиреАрдЪреЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:
"use asm";
рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ рдлрдВрдХреНрд╢рди рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
function expm(p, ak) {
рдЦрд░рд╛рдмреА # 2: рдореЙрдбреНрдпреВрд▓ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЪрд░ред
рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рдЖрдВрддрд░рд┐рдХ рдЪрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рдпрд╣ int рд╣реИ, рддреЛ var i = 0, рдпрджрд┐ рдбрдмрд▓ рд╣реИ, рддреЛ var d = 0.0, рдпрджрд┐ рд╕рд░рдгреА рд╣реИ, рддреЛ рдирдП рдФрд░ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╣реАрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдФрд░ ints рдЖрд░рдВрднреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ "рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝" рдХрд░реВрдВ, рдореБрдЭреЗ рдлреЙрд░реНрдо i = i | 0 рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗред
рд╡реИрд╕реЗ: рд╕реА рдХреА рд╢реИрд▓реА рдореЗрдВ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЪрд░ рдХрд╛ рдЖрд░рдВрдн рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдлреЙрд░реНрдо 1e-17 рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдХреА рддреНрд░реБрдЯрд┐ рджреЗрддреА рд╣реИ, 0.00000000000000001 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЖрдЙрдЯрдкреБрдЯ:
function expm(p, ak) { p = +p; ak = +ak; var i = 0; var pt = 0.0;
рдиреБрдХрд╕рд╛рди # 3: рддреБрд▓рдирд╛ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ
рд╕рдЪ рдХрд╣реВрдВ, рдпрд╣рд╛рдВ рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рдВрд╕рддрд╛ рд░рд╣рд╛, рд▓реЗрдХрд┐рди
рдЗрдВрдЯ рдФрд░ рдЗрдВрдЯ рдХреА рддреБрд▓рдирд╛ рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рд╣реИрдВ ред рдпрджрд┐ рдЖрдк i == k рдпрд╛ i <l рдЬреИрд╕реЗ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреИрд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди
"TypeError: asm.js рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐: рдПрдХ рддреБрд▓рдирд╛ рдХреЗ рддрд░реНрдХ рджреЛрдиреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП, рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдпрд╛ рдпреБрдЧрд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЗрдВрдЯ рдФрд░ рдЗрдВрдЯ рджрд┐рдП рдЧрдП рд╣реИрдВ ред
"Int рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ (i == 0) рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдереЛрдбрд╝реА рд╣рдВрд╕реА рдЬреЛрдбрд╝реА рдЧрдИ
"TypeError: asm.js рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐: рдПрдХ рддреБрд▓рдирд╛ рдХреЗ рддрд░реНрдХ рджреЛрдиреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП, рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдпрд╛ рдпреБрдЧрд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдлрд┐рдХреНрд╕реЗрдирдо рдФрд░ рдЗрдВрдЯ рджрд┐рдП рдЧрдП рд╣реИрдВ ред
"рдХреЗрд╡рд▓ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдареАрдХ рдХрд░ рд░рд╣реА рд╣реИрдВ (рдЙрджрд╛ред Pt == 1.0)ред
рдирддреАрдЬрддрди, рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА рдПрдХ рдФрд░ рдЗрдВрдЯ рдХреЗ рд╕рд╛рде
рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рдкрддреНрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (iред 0) <(ntp | 0) |
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рд┐рд░реНрдл "рдЖрдХрд░реНрд╖рдХ" рд╣реИ: рд╣рдо рд╕рднреА рдХреЗ рдмрдЬрд╛рдп i ++ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ i = (i | 0) + 1 | 0ред
рдкрд░рд┐рдгрд╛рдо:
if ((tp1 | 0) == 0) {
рдиреБрдХрд╕рд╛рди рдирдВрдмрд░ 4: рдЧрдгрд┐рддреАрдп рдФрд░ рдЕрдиреНрдп рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпред
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдпрджрд┐ рдЖрдк рдлрд░реНрд╢, рдкрд╛рдк, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рддреБрд░рдВрдд "рдПрд╕рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ")ред рдпрджрд┐ рдореИрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ stdlib.Math.floor рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдХрд╛рд░рдгред
рдЦрд╝рддрд░рд╛ # 5: рдмрдлрд╝рд░реНрд╕ред
рдФрд░ рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЬрдм рд╣рдо рдЗрдВрдбреЗрдХреНрд╕ i рдХреЗ рд╕рд╛рде / рдЕрд░реЗ рдПрд░реЗ рдХреЛ рдорд╛рди рджреЗрдирд╛ / рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ? рдЧрд┐рд░рдлреНрддрд╛рд░реА [i]ред рдорд╛рдирд╛ рдХрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рд╣рдореЗрдВ рдлреЙрд░реНрдо рдХреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
arr[i] = +1;
"TypeError: asm.js рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐: рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдПрдХ Int8 / Uint8 рдкрд╣реБрдВрдЪ ┬╗рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПрд╣рдо рд╕реВрдХреНрд╖реНрдо рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрджрд▓рд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ
рдЧреБрд░реБ рдореЗрдВ, рдореБрдЭреЗ рджрд╛рдИрдВ рдУрд░ 2 рдХреА рд╢рд┐рдлреНрдЯ рдорд┐рд▓реАред
arr[i >> 2] = +1;
"TypeError: asm.js рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐: рд╢рд┐рдлреНрдЯ рд░рд╛рд╢рд┐ 3 рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП"рд╣рдо рд╡рд┐рдирдореНрд░рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рддреАрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
arr[i << 3 >> 3] = +1;
рдпрд╣ рдЕрдВрдд рдореЗрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИред рдмрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рдХреЗ рд▓рд┐рдП рдореБрдЖрд╡рдЬрд╛ рджрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╢реНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо (function (window) { "use strict"; var ihex; var NTP = 25; var buffer = new ArrayBuffer(1024 * 1024 * 8); var series = (function (stdlib, env, heap) { "use asm"; var floor = stdlib.Math.floor; var pow = stdlib.Math.pow; var tp1 = 0; var tp = new stdlib.Float64Array(heap); var ntp = env.NTP | 0; function expm(p, ak) { p = +p; ak = +ak; var i = 0; var j = 0; var p1 = 0.0; var pt = 0.0; var r = 0.0;
PS рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рдпрд╛ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди (!) рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ asm.s рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрджрддрд░ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд┐рдПред
рдЕрд░реНрдерд╛рддреН,рд╕рдордп ./pi 1,000,000
>> рд╡рд╛рд╕реНрддрд╡рд┐рдХ 0m2.161s
>> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0m2.149s
>> sys 0m0.001s
рдХрдВрд╕реЛрд▓.рдЯрд╛рдЗрдо ('рдПрд╕');
рдкреАрдЖрдИ (1,000,000);
рдХрдВрд╕реЛрд▓.рдЯрд╛рдЗрдо рдИрдВрдб ('рдПрд╕');
>> s: 1868.5ms
рдФрд░ рдпрд╣ рднреА:
рд╕рдордп ./pi 10000000
>> рд╡рд╛рд╕реНрддрд╡рд┐рдХ 0m25.345s
>> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0m25.176s
>> sys 0m0.019s
рдХрдВрд╕реЛрд▓.рдЯрд╛рдЗрдо ('рдПрд╕');
рдкреАрдЖрдИ (10,000,000);
рдХрдВрд╕реЛрд▓.рдЯрд╛рдЗрдо рдИрдВрдб ('рдПрд╕');
>> s: 22152.83ms
рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛? рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдЙрдкрд░реЛрдХреНрдд
рдкреЛрд╕реНрдЯ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдбред рдореЗрд░реЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рднреА рдКрдкрд░
рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпреБрдкреАрдбреА:рдореИрдВ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП testASM.js рдХреЛ gitub рдкрд░ рд░рдЦрддрд╛ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ asmjs рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЪрд░ window.asmjs (рдмреВрд▓) рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
testASM.js рдФрд░
testASM.min.js