2008-08-25 14 views
6

Podczas wykonywania obliczeń na bardzo dużych liczbach, gdy integralne typy danych, takie jak double lub int64, nie są wystarczające, potrzebna może być osobna klasa obsługująca tak duże liczby.Najbardziej wydajna implementacja dużej liczby klas

Czy ktoś chce zaoferować skuteczny algorytm, jak najlepiej to zrobić?

Odpowiedz

4

Korzystanie z wbudowanych funkcji języka pracy dla mnie.

Java ma BigInteger i BigDecimal, a automatyzacja Python przełącza się na obiekt podobny do Javy, jeśli liczba wykracza poza zakres integer lub coś innego.

Co do innych języków, nie mam pojęcia.

Nienawidzę ponownego wynajdowania koła.

12

Są 2 rozwiązania problemu:

  • Prosty sposób: użyć zewnętrznej biblioteki takie jak "The GNU MP Bignum Library i zapomnieć o szczegóły wykonania.

  • Hard Way: Zaprojektuj własną klasa/strukturę zawierającą wiele typów danych wyższego rzędu takich zmiennych podwójnych lub Int64 i zdefiniować podstawowe operacje matematyczne dla nich za pomocą operatora przeciążenia (w C++) lub za pomocą metod wymienionych dodawanie, odejmowanie, mnożenie , shift itp. (w JAVA i innych językach OO).

Daj mi znać, jeśli potrzebujesz dalszej pomocy. Robiłem to już kilka razy w przeszłości.

3

Wykonywanie własnej biblioteki BigNum jest skomplikowane, więc powiedziałbym, że jjnguy. Użyj dowolnej oferty językowej jako biblioteki.

W .NET odwołaj się do biblioteki VisualJ dll, ponieważ zawierają klasy BigInteger i BigDecimal. Powinieneś jednak być świadomy pewnych ograniczeń tych bibliotek, na przykład braku metody pierwiastkowania kwadratowego.

Powiązane problemy