2009-02-19 23 views
22

Cách dễ nhất để xử lý các số lớn trong C là gì? Tôi cần lưu trữ các giá trị trong Khu vực 1000^900 ...BigInteger in C?

Có ai biết cách dễ dàng để làm điều đó không? Bất kỳ trợ giúp sẽ thực sự được đánh giá cao!

+0

1000^900 là * thực sự * lớn và có thể gây ra sự cố Big Integers do giới hạn bộ nhớ. Bạn có thể cần một cái gì đó mà tính toán biểu tượng để bạn có thể giữ giá trị 1000^900 cuộn lên. – jww

Trả lời

31

Sử dụng libgmp:

GMP là một thư viện miễn phí cho số học chính xác tùy ý, hoạt động trên nguyên ký, số hữu tỉ và số dấu chấm động. Không có giới hạn thực tế đến độ chính xác ngoại trừ những ngụ ý bởi bộ nhớ có sẵn trong máy GMP chạy trên ...

Kể từ phiên bản 6, GMP được phân phối theo các giấy phép kép, GNU LGPL v3GNU GPL v2 ...

Các nền tảng mục tiêu chính của GMP là các hệ thống kiểu Unix, như GNU/Linux, Solaris, HP-UX, Mac OS X/Darwin, BSD, AIX, vv. Nó cũng được biết là hoạt động trên Windows ở cả 32 bit và 64 -bit mode ...

+0

GMP có thể xử lý số lượng lớn như 1000^900? – jww

+1

Tôi chưa thử nghiệm nhưng nó đọc "Không có giới hạn thực tế đối với độ chính xác trừ những cái được ngụ ý bởi bộ nhớ có sẵn". Một ước tính nhanh chóng là 1000⁹⁰⁰ <1024⁹⁰⁰ là nó phù hợp với ít hơn 9000 bit. Tôi thấy không có lý do tại sao nó nên phá vỡ GMP. – kmkaplan

10

Có một vài thư viện để giúp bạn thực hiện việc này (toán học chính xác tùy ý):

Giả sử điều này không liên quan đến công việc (tức là bạn đang làm điều đó để vui hoặc sở thích của nó hoặc chỉ là một oportunity để học điều gì đó), mã hóa một thư viện cho phép toán chính xác tùy ý là một dự án tương đối thú vị. Nhưng nếu bạn cần phải hoàn toàn dựa vào nó và không quan tâm đến các loại hạt và bu lông chỉ cần sử dụng một thư viện.

5

Có một số thư viện để xử lý các số lớn xung quanh. Bạn có cần số nguyên hoặc số học dấu chấm động?

Bạn có thể xem mã được tích hợp vào Python cho tác vụ.

Bạn có thể xem xét các tiện ích mở rộng cho Perl cho tác vụ.

Bạn có thể xem mã trong OpenSSL cho tác vụ.

Bạn có thể xem thư viện GNU MP (đa độ chính xác) - như đã đề cập bởi kmkaplan.

+0

Nếu tôi không được phép sử dụng bất kỳ thư viện bên ngoài nào và chỉ được phép sử dụng GCC. Bây giờ, để thực sự lưu trữ 'BIGINTs' hoặc thực hiện bất kỳ phép tính nào trên chúng, tôi phải làm gì? – barnes

+2

Đọc Knuth? Ý tôi là, TAOCP - Nghệ thuật lập trình máy tính ([Tập 2, Thuật toán bán số] (http://www.amazon.com/Art-Computer-Programming-Volume-Seminumerical/dp/0201896842); phần 4.3 Nhiều Số học chính xác được áp dụng).Hoặc bất kỳ cuốn sách tương tự bao gồm số học đa độ chính xác. –