2008-08-25 40 views
6

Khi thực hiện các phép tính trên các số rất lớn trong đó các loại dữ liệu tách rời như kép hoặc int64 bị thiếu, một lớp riêng biệt để xử lý các số lớn như vậy có thể cần thiết.Thực hiện hiệu quả nhất một số lượng lớn

Có ai quan tâm đến việc cung cấp thuật toán hiệu quả về cách tốt nhất để làm điều này không?

Trả lời

4

Sử dụng các tính năng tích hợp của một ngôn ngữ có hiệu quả đối với tôi.

Java có BigIntegerBigDecimal và tính năng tự động hóa của Python chuyển sang đối tượng tương tự như Java nếu một số nằm ngoài phạm vi integer hoặc không.

Đối với các ngôn ngữ khác, tôi không biết.

Tôi ghét phát minh lại bánh xe.

12

Có 2 giải pháp cho vấn đề của bạn:

  • Cách dễ dàng: Sử dụng một thư viện bên ngoài như 'The GNU MP Bignum Library và quên đi chi tiết thực hiện.

  • cách cứng: Thiết kế lớp của riêng bạn/cấu trúc chứa nhiều kiểu dữ liệu bậc cao như biến đôi hoặc Int64 và xác định các hoạt động toán học cơ bản cho họ sử dụng toán tử quá tải (trong C++) hoặc thông qua các phương pháp đặt tên cộng, trừ, nhân , thay đổi, vv (trong JAVA và các ngôn ngữ OO khác).

Hãy cho tôi biết nếu bạn cần thêm trợ giúp. Tôi đã làm điều này một vài lần trong quá khứ.

3

Làm thư viện BigNum của riêng bạn phức tạp, vì vậy tôi muốn nói như jjnguy. Sử dụng bất kỳ ngôn ngữ nào của bạn cung cấp dưới dạng thư viện.

Trong .net, tham khảo tệp VisualJ dll khi chúng chứa các lớp BigInteger và BigDecimal. Tuy nhiên, bạn nên biết về một số hạn chế của các thư viện này, chẳng hạn như thiếu phương thức gốc hình vuông.

Các vấn đề liên quan