На этой странице говорится следующее:

ClojureScript в настоящее время поддерживает только целочисленные литералы и литералы с плавающей запятой, которые отображаются на примитивы JavaScript.

Может ли кто-нибудь сказать мне, что это на самом деле означает для целого числа? Они 64-битные (вероятно, нет, поскольку для этого потребуется два номера JS)? Или 32-битные? Или 53-битные (это максимальные целые биты в двойном AFAIK, см. здесь )?

[РЕДАКТИРОВАТЬ] причина , что я хочу это знать, заключается в том, что я хочу написать «симуляцию», используя «кроссплатформенный» язык, чтобы симуляция давала те же результаты в клиенте ( Браузер (JS), Android, Web-Start, ...) и Сервер (JVM). Известно, что плавающие точки вызывают «рассинхронизацию» при моделировании, потому что разное оборудование может давать разные результаты для одного и того же вычисления с одним и тем же входом. Поэтому я хочу использовать только «целые числа», но если размер целых чисел отличается в Clojure и ClojureScript, я все равно в конечном итоге получу «десинхронизацию» (например, при достижении целочисленное переполнение, которое используется в генераторах случайных чисел, которые активно используются при моделировании).

-1
Sebastien Diot 30 Дек 2015 в 22:09

2 ответа

Лучший ответ

«Сопоставляется с примитивами JavaScript». Мне кажется, это означает, что целое число ClojureScript точно такое же, как целое число JavaScript: оно сопоставляется с тем же примитивным типом. Что согласно это ответ, это 2 ^ 53-1

2
Community 23 Май 2017 в 12:00

Я попытался как-то проверить ответ @ Draco18s и, в конце концов, пришел к этому коду в REPL ClojureScript:

cljs.user=> (- (+ 9007199254740990 1) 1)
9007199254740990
cljs.user=> (- (+ 9007199254740991 1) 1)
9007199254740991
cljs.user=> (- (+ 9007199254740992 1) 1)
9007199254740991

Похоже "9007199254740992" по-прежнему действительное целое число, но я думаю, это просто из-за округления или чего-то подобного. Итак, это действительно 9007199254740991 (или 2 ^ 53-1).

2
Sebastien Diot 31 Дек 2015 в 16:51