Tôi đã học được rằng trình đọc Clojure diễn giải chữ thập phân với hậu tố 'M', như 1,23M, như BigDecimal. Và tôi cũng biết rằng các số thập phân không có chữ 'M' trở thành Java đôi.
Nhưng tôi nghĩ tốt hơn là số thập phân thông thường là BigDecimal và số thập phân phụ thuộc vào máy chủ có hậu tố, như 1.23H. Vì vậy, khi số bị hỏng hoặc cắt ngắn do giới hạn chính xác của IEEE double, chúng ta có thể dễ dàng nhận thấy rằng số đó là giới hạn chính xác. Ngoài ra, tôi nghĩ rằng biểu thức dễ dàng hơn sẽ không phụ thuộc vào máy chủ.
Có bất kỳ lý do nào mà Clojure diễn giải các số thập phân bằng chữ cái như Java đôi, ngoài hiệu suất thời gian? Ngoài ra, tôi không nghĩ rằng hiệu suất thời gian là một câu trả lời, bởi vì nó không phải là C/C++, và cách khác để khai báo số thập phân phụ thuộc vào máy chủ có thể được thực hiện giống như '1.23H'.Có lý do nào mà chữ số thập phân mặc định không phải là loại BigDecimal trong Clojure?
7
A
Trả lời
10
Khi lên trên một thời gian, cho số nguyên, Clojure sẽ tự động quảng cáo với kích thước lớn hơn khi cần. Điều này đã được thay đổi để các ngoại lệ tràn được ném ra. Ý nghĩa của tôi, từ xa là:
- Quyền hạn có nghĩa là Clojure là ngôn ngữ thực tế làm những việc thực tế trong một khoảng thời gian thực tế. Họ không muốn hiệu năng nổ tung bởi vì các phép toán số bất ngờ sử dụng các thư viện chính xác tùy ý thay vì các hoạt động số nguyên CPU. Tương phản với lược đồ có vẻ ưu tiên tính toán toán học hơn tính thực tiễn.
- Mọi người không thích bị bất ngờ khi chạy các cuộc gọi liên tiếp sẽ thất bại vì thư viện Java dự kiến số nguyên 32 bit thay vì số nguyên có kích thước tùy ý.
Vì vậy, quyết định mặc định là sử dụng số nguyên bình thường (Tôi nghĩ Java dài?) Và chỉ sử dụng số nguyên lớn tùy ý khi lập trình viên gọi nó, khi lập trình viên cố ý quyết định rằng họ sẵn sàng chấp nhận hiệu suất hit, và hit inter-op.
My đoán là các quyết định tương tự được thực hiện cho các số có dấu thập phân.
4
Hiệu suất có thể là một điều. Có lẽ clojure.core
nhà phát triển có thể kêu gọi về các lý do.
Cá nhân tôi nghĩ rằng nó không phải là quá nhiều của một vấn đề lớn không có BigDecimal theo mặc định, vì:
Các vấn đề liên quan
- 1. Clojure làm tròn đến chữ số thập phân
- 2. Trích xuất số thập phân trong BigDecimal
- 3. Format một BigDecimal như String với tối đa 2 chữ số thập phân, loại bỏ 0 trên phần thập phân
- 4. Lý do cho C# không hỗ trợ các đối số mặc định/mặc định là gì?
- 5. Làm tròn BigDecimal thành * luôn * có hai chữ số thập phân
- 6. Số nguyên là hai chữ số thập phân trong Java
- 7. Làm thế nào để cắt bớt loại thập phân và bảo tồn như loại thập phân mà không làm tròn?
- 8. Chuyển đổi int thành BigDecimal với số thập phân - Java
- 9. Làm tròn số thành số thập phân trong clojure
- 10. Vòng BigDecimal của Ruby: Đây có phải là lỗi không?
- 11. Số lượng lớn nhất mà lớp Thập phân có thể xử lý là gì?
- 12. Định dạng chuỗi với trailing số không xóa do nơi x là số thập phân trong Swift
- 13. Xác định số chữ số thập phân bằng Python
- 14. python: lấy số không có chữ số thập phân
- 15. Đặt số thập phân mặc định để in
- 16. Làm cách nào để định dạng các số chỉ có hai chữ số thập phân?
- 17. Tạo số nhị phân của n chữ số trong clojure
- 18. làm cách nào để hiển thị 2 chữ số thập phân bất kể số chữ số sau thập phân nhanh?
- 19. Số định dạng SQLite với 2 chữ số thập phân luôn là
- 20. Có số thập phân, muốn cắt thành 2 chữ số thập phân nếu có
- 21. Định dạng phao sang hai chữ số thập phân
- 22. Xóa chữ số sau hai dấu thập phân không phải số tròn trong javascript?
- 23. Android - Vòng 2 chữ số thập phân
- 24. Đây có phải là một so sánh nổi hợp lệ mà chiếm một số vị trí thập phân không?
- 25. Format đến hai chữ số thập phân
- 26. LISP - chữ số sau dấu thập phân
- 27. Định dạng chuỗi chỉ cho một chữ số thập phân?
- 28. Tại sao C# xử lý 0 là int và không phải là ngắn/thập phân vv?
- 29. Có lý do nào mà Cassandra không có hỗ trợ không gian địa lý?
- 30. tôi cần phải làm tròn một phao đến hai chữ số thập phân trong Java
Tôi nhận thấy rằng clojure tự động quảng bá lâu dài với BigInt bằng '* ''. Tuy nhiên, khi tôi gõ '(* '1e200 1e200)' và '(*' 1e-200 1e-200)', hãy chỉ nói 'Infinity' và' 0.0'. Tại sao các chức năng tự động quảng cáo đó không hỗ trợ loại kép? – burrownn