Skip to content

Instantly share code, notes, and snippets.

View Yaffle's full-sized avatar

Viktor Yaffle

View GitHub Profile
@Yaffle
Yaffle / index.html
Last active January 20, 2017 15:12
Math.cbrt #jsbench #jsperf (http://jsbench.github.io/#7a271ffbf88a5d4b0f5b42b13b89144e) #jsbench #jsperf
<!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>
@Yaffle
Yaffle / index.html
Last active December 21, 2016 15:00
Math.trunc vs Math.floor #jsbench #jsperf (http://jsbench.github.io/#da9d5dbe6f00bc69c5c1328b6a3f6cee) #jsbench #jsperf
<!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>
@Yaffle
Yaffle / Math.fma.js
Last active March 19, 2017 16:19
Math.fma - fused multiply–add (FMA) or fused multiply–accumulate (FMAC) in JavaScript
// 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 () {
@Yaffle
Yaffle / sort.js
Last active September 8, 2018 06:09
merge sort
// `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`.
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);
// (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);
@Yaffle
Yaffle / URLSearchParams.js
Last active December 2, 2015 11:56
http://url.spec.whatwg.org/ - thanks to Anne van Kesteren for the spec
"use strict";
function URLSearchParams(query) {
var data = [];
query = query.toString();
query = query.replace(/\+/g, " ");
var strings = query.split("&");
var l = strings.length;
var i = 0;
while (i < l) {
markup.doc = document.implementation.createHTMLDocument ? document.implementation.createHTMLDocument("") : null;
function markup(s) {
var doc = markup.doc;
var div = null;
if (doc === null) {
div = document.createElement("div");
if (window.toStaticHTML) {// IE 8
div.innerHTML = window.toStaticHTML(s);
} else {
@Yaffle
Yaffle / timeZone.html
Created September 13, 2013 11:13
timeZone.html
<script>
var timeZoneIds = [
"Africa/Abidjan",
"Africa/Accra",
"Africa/Addis_Ababa",
"Africa/Algiers",
"Africa/Asmera",
"Africa/Bamako",
"Africa/Bangui",
@Yaffle
Yaffle / gist:6110421
Last active December 20, 2015 09:49
<script>
var whiteList = ["http://localhost", "http://hostel6.ru", "http://yandex.ru"];
window.addEventListener("message", function (e) {
var origin = e.origin;
var i = whiteList.length;
var ok = false;
while (--i >= 0) {
if (whiteList[i] === origin) {
ok = true;