Как стать автором
Обновить

Комментарии 30

НЛО прилетело и опубликовало эту надпись здесь

Наверно речь о том что в JS не хватает целых чисел ((u)int32, u(int64)), и использовать вместо них float это костыль, в тех случаях когда предметная область предполагает целые числа.


Теперь же, вместо того чтобы добавить целые числа определённого размера, добавили BigNumber — что намного менее производительно и во многих случаях могло бы быть заменено на int64 или int128.

Почему не int256 или int512?
int32 не имеет смысла, т. к. движок (по крайней мере V8) итак использует SMI, который аналогичен int32 (на 64 бит) или int31 (на 32 бит). Double используется только в случаях, когда вы выходите за указанный диапазон.

А вот отсутствие (u)int64 да, обидно.
Причём тут костыль? Вы со стандартом IEEE 754 не знакомы? Так познакомьтесь, а потом умничайте.

Вы n пропустили в записи числа.

Жаль только реально использовать можно будет года через два.
А так хорошее нововведение, вот как раз недавно страдал, что в 2^53 идентификаторы не влезают (а в 2^64 влезли бы).
Я однажды чуть не тронулся, когда онлайн-просмотрщик JSON начал округлять 64-битные айдишники, и запросы в БД руками с неявно округленным айди и из скрипта с правильным давали разные результаты
Унарный — можно использовать для обозначения отрицательного значения BigInt, например, -42n. Унарный + не поддерживается, потому что он нарушит код asm.js, который ожидает, что +x всегда будет возвращать либо Number, либо исключение.

Ну вот, добавили полезную фичу, чтоб пофиксить костыль, но и она вышла с костылем.

А что насчёт передачи bigint в json?
Как нужно будет парсить строку и понимать, что там находится?
Ведь нельзя складывать(умножать, ..) bigint с обычными числами

Видимо, пока нужно знать, где чего находиться, чтобы парсить значение из нужного поля руками, а также воткнуть костыль для перевода BigInt в строку при сериализации вместо исключения. Например, так: jsfiddle.net/c0hhydy4/2

Почему только BigInt? Почему бы заодно не сделать BigFloat или BigNumber?

Про decimal уже написали же
Уточните, пожалуйста, а где именно писали? Не могу найти.
математические операции над большими числами обычно используются в финансовых технологиях

Чтобы подсчитать, сколько нашли денег у главы питерского ростехнадзора. )
Простите, не удержался.

Не понимаю, откуда в JavaScript настолько острая потребность в длинных числах, что нельзя обойтись библиотекой.

Лично я уже пробовал использовать в качестве ключей для Map.


Для пространства 2D плоскость 32bitx32bit = 64bit ключ для Map, что бы не ремапить проекцию. (Вечно перепиливаемая заново браузерная игрушка-платформер с "бесконечным" миром)


Сейчас для ключа с быстрыми побитовыми операциями (работа с тайлами), безопасно использовать только по 16bit (x + y<<16, с number побитовая арифметика корректна только в приделах 32бит ключ), т.е. 64536 x ..., а с bigint 32bit x ...

Плюсуюсь к комментарию выше — они нужны для ключей Set/Map.
Там годятся только элементарные типы — числа или строки, но не объекты.
Точнее, чисто технически объекты использовать тоже можно, но смысла в этом нет, потому что для равенства ключей не годится объект-копия с аналогичными значениями полей, нужен только строго именно тот же самый объект.
Решается хранением длинных чисел в виде строк. Это тянет на острую необходимость, только если у значительного числа разработчиков возникает такая потребность. Это разве так?
Решается, но ценой серьезной просадки перфоманса, проверено.
Насчет острая или не острая — вопрос философский. Не нужно — не используйте, в чем проблема?

Теперь браузер можно повесить еще проще...


1n << 10000000n


P.S. chrome unstable — 68.0.3418.2 (Official Build) dev (64-bit)

А почему asm.js регулирует эволюцию языка?
Как возможно использовать BigInt? В браузере не наблюдаю эту возможность
В первом абзаце упоминается Chrome 67
эм, скомпилил ноду с последним V8 и тут это:
./node
> 123n*1
TypeError: Cannot mix BigInt and other types, use explicit conversions

так и задумывалось?
Верно, так и задумывалось. В переводе об этом есть.

Доступна ли операция деления с остатком за одно действие (DivRem) у BigInt — это быстрее, чем использовать последовательное / и %? Во многих языках программирования такая есть.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории