Tôi đang sử dụng java và phải xử lý các số lớn hơn dài (64 bit). Tôi nên sử dụng cái gì? Kích thước của BigInteger trong java là bao nhiêu?Số lớn yêu cầu Đại diện hơn 64 bit
Trả lời
Như bạn đã đề cập trong câu hỏi của mình, bạn nên sử dụng BigInteger.
Chúng có thể lớn tới mức bạn cần - cho đến khi bạn hết bộ nhớ.
bạn đang tìm kiếm lớp BigDecimal hoặc nếu bạn chỉ cần số nguyên, lớn hơn BigInteger. Độ chính xác tùy ý của nó, do đó kích thước thay đổi dựa trên số lượng lớn các số bạn nhập
Kích thước của BigInteger trong java là gì?
Đó là một chút khó khăn. Vấn đề là không có đặc điểm kỹ thuật rõ ràng về giới hạn trong javadocs.
Lớp học sử dụng
int[]
để thể hiện độ lớn. Điều này có nghĩa là nó có khả năng có thể đại diện cho số lên đến((2^32)^(2^31 - 1)
.API có phương thức trả về số dưới dạng mảng byte bổ sung của 2. Giới hạn cho số này là
((2^8)^(2^31 - 1)
.API có phương thức khác trả về kích thước của số theo bit ... dưới dạng
int
. Điều này ngụ ý giới hạn là2^(2^31 - 1)
hoặc có thể là2^(2^32)
.
Trên thực tế, những con số này đều rất lớn mà bạn sẽ lẽ chạy vào giới hạn không gian đống (hoặc giới hạn hiệu suất CPU) đầu tiên.
vấn đề là tôi phải tìm ra căn bậc hai của một số.
Bạn sẽ có thể tìm thấy thuật toán để tính căn bậc hai trong sách giáo khoa toán học đại học của mình (hoặc Wikipedia). Mã hóa nó phải là một nhiệm vụ đơn giản.
(tôi muốn chỉ cho bạn ở ví dụ mã, ngoại trừ việc này có mùi như "bài tập về nhà", và tôi không hoàn toàn tin tưởng vào mã mà tôi tìm thấy.)
Đừng quên rằng nhất số nguyên có một căn bậc hai không hợp lý ...
Để tìm căn bậc hai của BigInteger bạn phải thực hiện tìm kiếm trên google bằng câu trả lời "-StackOverflow" bị bỏ qua. https://www.google.com/search?q=java+extract+root+bignum&ie=utf-8&oe=utf-8#q=java+root+BigInteger+-stackoverflow.com+-stackexchange.com mang lại liên kết đầu tiên đến http://faruk.akgul.org/blog/javas-missing-algorithm-biginteger-sqrt/ Đây là một thuật toán. Java được cho là "viết một lần, sử dụng ở mọi nơi". Vâng, một số người dùng SO tin rằng bạn phải phát minh lại bánh xe. Yêu cầu họ cho một mô-đun họ trả lời "mùi giống như một bài tập về nhà, tự mình làm". Và có, BigInteger là một nửa nướng. Nó không thể làm lôgarit hoặc rễ ra khỏi hộp. Nó rất chậm. Thuật toán được đưa ra dưới đây.
BigInteger sqrt(BigInteger n) {
BigInteger a = BigInteger.ONE;
BigInteger b = new BigInteger(n.shiftRight(5).add(new BigInteger("8")).toString());
while(b.compareTo(a) >= 0) {
BigInteger mid = new BigInteger(a.add(b).shiftRight(1).toString());
if(mid.multiply(mid).compareTo(n) > 0) b = mid.subtract(BigInteger.ONE);
else a = mid.add(BigInteger.ONE);
}
return a.subtract(BigInteger.ONE);
}
- 1. NSDecimalNumber và số nguyên lớn dài (64 bit)
- 2. Ứng dụng Java 64 bit: Hệ điều hành 64 bit, JRE 64 bit và Ứng dụng 64 bit có yêu cầu không?
- 3. Chuyển đổi số nguyên thành một bit đại diện
- 4. in bit đại diện của các số trong python
- 5. Yêu cầu bộ nhớ của một tham chiếu đối tượng trên một JVM 64 bit
- 6. Trong các hệ thống 64 bit, một cột 32 bit chiếm ít không gian hơn một bit 64 bit?
- 7. Có thể nhân đôi được sử dụng để đại diện cho số 64 bit mà không bị mất chính xác
- 8. Máy ảo 32 hoặc 64 bit nhanh hơn trên máy 64 bit (vmware)
- 9. Tại sao VSIZE lại lớn hơn rất nhiều đối với quá trình 64 bit Linux?
- 10. Đại biểu trong IOS - Một số yêu cầu làm rõ
- 11. Ứng dụng 32 bit hoặc 64 bit trên hệ điều hành 64 bit?
- 12. 64 Bit "mạng" (lớn-endian) để Integer trong Perl
- 13. Không thể chạy một JVM 64-bit trong 64-bit Windows 7 với một kích thước đống lớn
- 14. 64 bit enum trong C++?
- 15. Đối số 64 bit cho fcntl.ioctl()
- 16. tạo ngẫu nhiên số nguyên 64 bit
- 17. Thêm hai số 64 bit trong Assembly
- 18. Cách yêu cầu System.Data.OracleClient sử dụng Trình điều khiển Oracle 64 bit
- 19. Cách tốt nhất trong REST api để yêu cầu đại diện tóm tắt của tài nguyên?
- 20. LocalStorage, một số yêu cầu Ajax hoặc yêu cầu Ajax lớn?
- 21. sử dụng bash: ghi bit đại diện của số nguyên vào tập tin
- 22. Java JDK 32 bit và 64 bit
- 23. Tại sao điều này nhanh hơn trên 64 bit so với 32 bit?
- 24. 64 bit ODBC Exception
- 25. Tạo một trường bit lớn?
- 26. Số lớn hơn 2^32 được xử lý bởi máy 32 bit như thế nào?
- 27. Ứng dụng 32 bit có chạy nhanh hơn hoặc chậm hơn trên hệ điều hành 64 bit không?
- 28. Giao diện Native Java 32 bit dll trên hệ thống 64 bit
- 29. Chuyển đổi số nguyên 64 bit từ chuỗi
- 30. Java 64 bit có hoạt động tốt hơn phiên bản 32 bit không?
vấn đề là tôi phải tìm ra căn bậc hai của một số.Nhưng không có thư viện sẵn có nào để tìm ra số roo của một số nguyên lỗi. – Ashwin
@Ashwin: Chờ một phút - nếu căn bậc hai không được đảm bảo là số thập phân, tại sao bạn không chỉ đơn giản là sử dụng một đôi? –
@HovercraftFullOfEels: Như tôi đã nói, số của tôi vượt quá 64 bit, khi kích thước của double là 64 bit – Ashwin