This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Implementation of the standard decodeURIComponent using TextDecoder. | |
// The original JavaScript specification does not separate UTF-8 decoding this way. | |
// The purpose is to show the possible implementation in JavaScript language. | |
function hexDigit(code) { | |
if (code >= '0'.charCodeAt(0) && code <= '9'.charCodeAt(0)) { | |
return code - '0'.charCodeAt(0); | |
} else if (code >= 'A'.charCodeAt(0) && code <= 'F'.charCodeAt(0)) { | |
return code + (10 - 'A'.charCodeAt(0)); | |
} else if (code >= 'a'.charCodeAt(0) && code <= 'f'.charCodeAt(0)) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*jslint strict:global*/ | |
/*global self, fetch, caches, console, Promise, Request*/ | |
"use strict"; | |
var CACHE_NAME_PREFIX = "ru~"; | |
var CACHE_NAME = "ru~20180818T075107Z"; | |
var URLS_TO_CACHE = "./;js.js?20180818T075107Z;css.css?20180818T075107"; | |
self.addEventListener("install", function (event) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function replaceSimpleDigit(code) { | |
if (code >= 0x0660 && code <= 0x669) { | |
return {code: code - 0x0660 + 48, name: "arab"}; | |
} | |
if (code >= 0x06F0 && code <= 0x6f9) { | |
return {code: code - 0x06F0 + 48, name: "arabext"}; | |
} | |
if (code >= 0x0966 && code <= 0x96f) { | |
return {code: code - 0x0966 + 48, name: "deva"}; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"/> | |
<title>isSafeInteger #jsbench #jsperf</title> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
<script src="./suite.js"></script> | |
</head> | |
<body> | |
<h1>Open the console to view the results</h1> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"/> | |
<title>Math.cbrt #jsbench #jsperf</title> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
<script src="./suite.js"></script> | |
</head> | |
<body> | |
<h1>Open the console to view the results</h1> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"/> | |
<title>Math.trunc vs Math.floor #jsbench #jsperf</title> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
<script src="./suite.js"></script> | |
</head> | |
<body> | |
<h1>Open the console to view the results</h1> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// a * b + c | |
// Math.fma - fused multiply–add (FMA) or fused multiply–accumulate (FMAC) in JavaScript | |
// For implementation details, see "The Handbook of Applied Cryptography" | |
// http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf | |
// and | |
// https://github.com/JuliaLang/openlibm/blob/master/src/s_fma.c | |
//!? BUGGY | |
(function () { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// `Array#sort` implementation using the merge sort | |
// Notes: | |
// 1) calls comparator for undefined values, holes, values from the prototype chain; | |
// 2*) replaces holes with undefined values or values from the prototype chain; | |
// 3*) does not use `ToObject(this)`, `ToLength(this.length)`; | |
// 4*) does not throw errors for non-undefined non-function `comparefn`. | |
// 5*) uses `Math`, `Math.floor`, `String`, `Array`. | |
// 6*) calls setters of `Array.prototype` during internal buffer initialization. | |
// * This behaviour is inconsistent across browsers even for built-in `Array#sort`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var drawArrow = function (context, x1, y1, x2, y2) { | |
context.lineWidth = 1.25; | |
context.beginPath(); | |
context.moveTo(x1, y1); | |
context.lineTo(x2, y2); | |
context.stroke(); | |
var a = Math.PI / 8; | |
var h = 12; | |
var sa = Math.sin(a); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// (Math.exp(704.6589) / Math.expm1(704.6589) - 1) / Number.EPSILON | |
var isExpOK = Math.exp(704.6589) >= 1.0702171200481775e+306 * (1 - 16 * Math.pow(2, -52)) && | |
Math.exp(704.6589) <= 1.0702171200481775e+306 * (1 + 16 * Math.pow(2, -52)); | |
// (Math.exp(704.6589) / Math.expm1(704.6589) - 1) / Number.EPSILON | |
var isExpOK = Math.exp(704.6589) >= 1.0702171200481775e+306 * (1 - 16 * Math.pow(2, -52)) && | |
Math.exp(704.6589) <= 1.0702171200481775e+306 * (1 + 16 * Math.pow(2, -52)); | |
Math.exp = function (x) { | |
var hi = 0.6931471805598903; | |
var lo = 5.497923018708371e-14; | |
var k = Math.floor(x / hi + 0.5); |