Я узнал, что читатель Clojure интерпретирует десятичный литерал с суффиксом «M», как 1.23M, как BigDecimal. И я также знаю, что десятичные числа без «М» становятся Java-двойными.
Но я думаю, что было бы лучше, чтобы нормальное десятичное число было BigDecimal, а зависящее от узла десятичное число имеет суффикс, например 1.23H. Поэтому, когда число повреждено или усечено из-за предел точности IEEE double, мы можем легко заметить, что число ограничено точностью. Кроме того, я думаю, что простое выражение должно быть независимым от хоста.
Есть ли причина, по которой Clojure интерпретирует буквальную десятичную дробь как Java double, отличную от времени? Кроме того, я не думаю, что производительность по времени - это ответ, потому что это не C/C++, а другой способ объявить зависящую от узла десятичную дробь можно реализовать так же, как «1.23H».Есть ли причина, по которой десятичный литерал по умолчанию не является BigDecimal в Clojure?
ответ
Когда-нибудь, для целых чисел, Clojure автоматически увеличит размеры при необходимости. Это было изменено так, что исключаются исключения переполнения. Мой смысл, издалека, состоял в том, что:
- Власти, которые предназначены для Clojure, являются практическим языком, занимающимся практическими делами в практическом количестве времени. Они не хотели, чтобы производительность взорвалась, потому что числовые операции неожиданно использовали произвольные библиотеки точности вместо целых операций ЦП. Контраст к схеме, которая, по-видимому, определяет приоритетность математической чистоты по сравнению с практичностью.
- Людям не нравилось быть удивленным во время выполнения, когда вызовы между операторами не удались, потому что в библиотеке Java ожидалось 32-битное целое, а не произвольное целое число.
Таким образом, был решен, что по умолчанию, чтобы использовать обычные целые числа (я думаю, что Java лонги?) И использовать только произвольно большие целые числа, когда программист назвал его, когда программист сознательно решил, что они были готовы принять производительность и межоперационный удар.
My guess - это аналогичные решения, касающиеся чисел с десятичной точкой.
Производительность может быть одной вещью. Возможно, clojure.core
разработчики могли прослушивать причины.
Я лично считаю, что это не так много крупной сделки не иметь BigDecimal по умолчанию, так как:
- 1. есть причина, по которой std :: make_shared потребует конструктор по умолчанию?
- 2. Есть ли причина, по которой glEnableVertexAttribArray существует?
- 3. Есть ли причина, по которой я не буду использовать «let»?
- 4. Есть ли причина, по которой мой html не рендеринг?
- 5. Есть ли причина, по которой C99 не поддерживает перегрузку функции?
- 6. Является ли причина, по которой я не могу добавить ManyToManyField?
- 7. Есть ли причина, по которой lambdas с пустым списком захвата не может быть сконфигурирован по умолчанию?
- 8. Есть ли причина, по которой устройство по умолчанию не привязывается к полям?
- 9. Есть ли причина, по которой это не избыточный код?
- 10. Есть ли причина, по которой sbt не поддерживает ключ разработчика?
- 11. Есть ли причина, по которой мы не используем подклассы UIImageView?
- 12. Есть ли причина, по которой некоторые функции не принимают пустоту *?
- 13. Есть ли причина, по которой разработчики JavaScript не используют Array.push()?
- 14. Есть ли причина, по которой это не работает?
- 15. Есть ли какая-то причина, по которой MicrosoftAjax.js не минимизируется?
- 16. Есть ли причина, по которой эта форма не будет подана?
- 17. Есть ли причина, по которой добавление добавляет размер элемента?
- 18. Есть ли причина, по которой HRESULT следует назначить переменной?
- 19. Есть ли причина, по которой у Cassandra нет геопространственной поддержки?
- 20. Есть ли причина, по которой функция будет притворяться родной?
- 21. Есть ли веская причина, по которой заголовок ListView занимает позицию?
- 22. Есть ли причина, по которой я должен назвать Integer.hashCode()?
- 23. Есть ли причина, по которой мы даем весеннюю аннотацию имени?
- 24. Есть ли причина, по которой нужно встраивать вызовы функций?
- 25. Есть ли причина, по которой команды медленнее, чем обычные запросы?
- 26. Есть ли причина, по которой программисты используют символ с System.in.read()?
- 27. Есть ли причина, по которой заканчиваются окончания строк?
- 28. Есть ли причина, по которой передача объектов в намерения не является прямой?
- 29. Причина, по которой мое приложение не выйдет?
- 30. Возможная причина, по которой уведомление не удаляется
Я заметил, что clojure автоматически продвигает BigInt с '* ''. Однако, когда я набрал '(* '1e200 1e200)' и '(*' 1e-200 1e-200)', repl просто говорит 'Infinity' и' 0.0'. Почему эти функции автоматического продвижения не поддерживают двойной тип? – burrownn