2012-08-23 18 views
39

Tôi nhìn vào stackoverflow question relating to Big Integer này và đặc biệt là tôi không hiểu dòng này (dòng chữ in nghiêng):BigInteger không có giới hạn nghĩa là gì?

Trong lớp BigInteger, Tôi không có giới hạn và có một số chức năng hữu ích có nhưng nó là khá buồn để chuyển đổi đẹp mã của bạn để làm việc với các lớp BigInteger, đặc biệt khi nguyên thủy nhà khai thác không làm việc ở đó và bạn phải sử dụng chức năng từ lớp này.

Tôi không biết mình thiếu gì nhưng đại diện cho thứ gì đó không có giới hạn bạn sẽ yêu cầu bộ nhớ vô hạn? Whats là thủ thuật ở đây?

+0

Xem thêm: http://stackoverflow.com/a/12693333/829571 – assylias

Trả lời

66

Không có giới hạn lý thuyết. Lớp BigInteger phân bổ bộ nhớ nhiều như nó cần cho tất cả các bit dữ liệu mà nó được yêu cầu giữ.

Tuy nhiên, có một số giới hạn thực tế, được quyết định bởi bộ nhớ có sẵn. Và có những giới hạn kỹ thuật hơn nữa, mặc dù bạn rất khó có khả năng bị ảnh hưởng: một số phương pháp giả định rằng bit là địa chỉ của int chỉ số, vì vậy mọi thứ sẽ bắt đầu phá vỡ khi bạn đi trên Integer.MAX_VALUE bit.

+0

Nó rất giống với một chuỗi hoặc một byte [] theo cách đó (mặc dù tôi nghĩ rằng chúng được giới hạn về mặt kỹ thuật đối với các phần tử địa chỉ số nguyên). – Thilo

+2

@Thilo: như vậy là BigInteger: dữ liệu được tổ chức tại một int [] trong đó đặt một giới hạn lý thuyết vào kích thước của số nó có thể đại diện. –

+0

Tôi nghe công việc đang được tiến hành cho các mảng "dài" (và phải tự hỏi ai cần điều đó) ;-) – Thilo

13

Graham đã đưa ra câu trả lời tuyệt vời cho câu hỏi này. Tôi sẽ chỉ muốn thêm rằng bạn phải cẩn thận với valueOf phương pháp vì nó được tạo ra sử dụng long tham số nên giá trị tối đa là Long.MAX_VALUE.

+1

cảm ơn vì sự khôn ngoan đó. + 1. – Geek

+1

Một trong đó có một tham số dài rõ ràng là không thể đi xa hơn, nhưng có những nhà thầu mà có Strings hoặc mảng byte. – Thilo

+0

Đã sửa. Cảm ơn :) –

3

Được sử dụng khi chúng ta cần những con số rất lớn với độ chính xác tùy ý. Điều quan trọng cần lưu ý là "độc đoán" chính xác hoặc số chữ số không có nghĩa là "không giới hạn": nó có nghĩa là số lượng các chữ số trong một số hoặc số lượng chữ số chính xác trong tính toán được giới hạn bởi bộ nhớ và/hoặc giới hạn độ chính xác định nghĩa mà chúng tôi chỉ định.

2

Nhìn vào mã nguồn của lớp BigInteger, bạn sẽ thấy (nó có thể được thực hiện với NetBean). Một số sẽ được biểu diễn như một mảng int. Ví dụ, 10113 sẽ là [1, 0, 1, 1, 3] (đây không phải là chính xác những gì lớp BigInteger có, chỉ là ví dụ lớn như thế nào số mô-đun làm việc). Vì vậy, về mặt kỹ thuật, giới hạn duy nhất của nó sẽ là bộ nhớ của bạn.