Занимательный факт о вычислениях с плавающей запятой
Подсмотрел в твиттере Раймонда Хеттингера пример для Питона.
В Javascript это тоже работает:
var x = 12345678901234567.0
console.log(x === x + 1); //true

Вычислить n знаков числа Пи
В Твиттере Раймонда Хеттингера был интересный твит - вычисление n знаков числа Пи - на Питоне.
Стало интересно как записать это на JavaScript. Сказано - сделано:
function pi(places) {
const extra = 8;
const pow = function(number, power) {
result = number;
for(let i = 0; i < power; i++) {
result *= number;
}
return result;
}
const one = pow(BigInt(10), places + extra)
let t = BigInt(3) * one;
let c = BigInt(3) * one;
let n = BigInt(1);
let na = BigInt(0);
let d = BigInt(0);
let da = BigInt(24);
while (t > 1) {
n = n + na;
na = na + BigInt(8);
d = d + da;
da = da + BigInt(32);
t = (t * n / d);
c += t;
}
return (c / pow(BigInt(10), extra))
}
console.log(pi(100)) //3141592653589793238462643383279502884197169399375105820974944592307816406
//2862089986280348253421170679
Занятно было посмотреть как работают вычисления в BigInt - если результатом деления двух Int в JavaScript будет Float то результатом деления двух BigInt будет тоже BigInt. При этом нельзя использовать Math.pow для возведения в степень - результатом Math.pow оказывается Number и точность вычислений заметно теряется. Поэтому пришлось делать свою функцию pow c n умножений. Как сделать лучше пока не придумал.
Как мы видим работать с int64 на Питоне значительно проще - Javascript тут значительно проигрывает.
Отладка JavaScript в nodejs
Node.js умеет из коробки отлаживать JavaScript файлы. Для того чтобы зайти в режим отладки нужно запустить скрипт с коммандой inspect.
node inspect <filename.js>
При этом программа начнёт выполняться сразу в режиме отладки и остановится на первой строке.
Для перехода к следующей строке нажмите n[enter], для step into s[enter], для продолжения (Resume execution) с[enter].
Выход из приложения два раза ^C.
Записал коротенькое видео как это делается.
Atom - IDE
В очередной раз решил попробовать Атом. Оказалось, что с того времени, как я его ставил последний раз технологии продвинулись вперед, и теперь им вполне можно пользоваться. Конечно это не phpStorm, но за свои деньги (а он, кстати, бесплатный) он оказался вполне сравнимым по возможностям.
Главным критерием для меня было, чтобы можно было в одной среде работать с Java, С++ и PHP. Atom пока вполне с этой задачей справляется, конечно, не так хорошо как специализированные продукты, но, это от него и не требуется.
Из нужных расширений пока поставил goto-definition и terminal-tab. Сильно не хватает продвинутых возможностей статического анализа от phpStorm ну да без этого пока можно жить.