[Pascal] Obsługa dużych liczb

0

Pogrzebałem trochę na forum, ale nie znalazłem nic odpowiedniego. Chciałbym się dowiedzieć w jaki sposób można zapamiętać i operować (dodawać, mnożyć...) liczby wykraczające poza zakresy zmiennych całkowitych w Pascalu. Na przykład liczbę 500 cyfrową zapamiętywałem w tablicy, gdzie każda komórka zawierała jedna cyfrę tej liczby. Ale ten sposób jest dosyć wolny. Czy znacie jakieś inne metody?
Z góry dzięki, pozdrawiam.

0

O ile liczby zmiennoprzecinkowe nie wystarczą, nie ma innej metody.

0

Na tablicy znaków. Poszukaj, było.

0
Wilkołak napisał(a)

Na przykład liczbę 500 cyfrową zapamiętywałem w tablicy [...]. Czy znacie jakieś inne metody?

Coldpeer napisał(a)

Na tablicy znaków. Poszukaj, było.

Właśnie o tym pisze w pierwszym poście. Nie ma innej metody.

0
Wilkołak napisał(a)

Pogrzebałem trochę na forum, ale nie znalazłem nic odpowiedniego. Chciałbym się dowiedzieć w jaki sposób można zapamiętać i operować (dodawać, mnożyć...) liczby wykraczające poza zakresy zmiennych całkowitych w Pascalu. Na przykład liczbę 500 cyfrową zapamiętywałem w tablicy, gdzie każda komórka zawierała jedna cyfrę tej liczby. Ale ten sposób jest dosyć wolny. Czy znacie jakieś inne metody?
Z góry dzięki, pozdrawiam.

Cyfra? Dziesiętna?

O wiele efektywniej byłoby trzymać liczbę w systemie o podstawie 2^32 (czyli jeden dword), czyli tablicę 32 bitowych liczb całkowitych (typ integer w pascalu?).

0

A kto mówi, że dziesiętna? Co prawda w wielu systemach przechowywanie a BCD jest pomocne, ale oczywiście jako podstawę systemu liczbowego warto uznać wartość odpowiadającą wymiarowi rejestrów procesora, czyli wspomniane powyżej 2^32.

0

IntegerAsm - wpisz w googlach. Moduł napisany przez jakiegoś rosjanina do operowania na "liczbach całkowitych" do 255 znaków - mega rewelacyjna sprawa. Żona w urzędzie w ewidencji często musi mnożyć/dodawać/odejmować ułamki, więc jej kiedyś napisałem programik. Ostatnio okazało się że działki w Krakowie, mają już takie podziały, że Int64 nie wystarczał. Zresztą przy kilkunastocyfrowych liczbach chodzilo to jak krew z nosa. Zaciągnołem IntegerAsm, dodałem sobie kilka funkcji (oczywiście nie w asm ;/) i teraz mnożenie/dodawanie/odejmowanie ułamków co mają po 50 cyfr, trwa tysięczne części sekundy. Odpadła nawet konwersja Edit1.Text na liczbę : ) bo wartości wprost z Editów idą do działań : )

W IntegerAsm masz 4 działania tylko:

  • dodawanie
  • odejmowanie
  • mnożenie
  • dzielenie z resztą : ( '5' / '2' = '2.1'
    Obsługuje też liczby ujemne.

Jeśli nie potrzebujesz prawdziwego dzielenia i innych bajerów to to jest jak znalazł - a przede wszystkim mega wydajne. Jak wystawie na www, ten programik to podeślę linka.

BTW na własne potrzeby dorobiłem sobie funkcje typu Min, Max, NWD, Sign itd... tyle że bazujące na tych defaultowych, jak ktoś miałby po ręką jakąś szybszą implementacje tychże to proszę o info.

0
b0bik napisał(a)

Ostatnio okazało się że działki w Krakowie

:-) :-|
Żartujesz czy piszesz poważnie? Int64 nie wystarczał na podział działek? To jak oni je dzielą??

0
Szczawik napisał(a)

Żartujesz czy piszesz poważnie? Int64 nie wystarczał na podział działek? To jak oni je dzielą??

To nie chodzi o to że oni je dzielą na raz na tyle części. Nie znam się dokładnie na tym. Z grubsza głównie chodzi o to jak są jakieś spółdzielnie mieszkaniowe, to teren jakoś należy do wszystkich czy coś. A potem jeszcze jakiś spadek, i trzeba to podzielić. Czasem jak się oblicza czyjś udział to też się mnoży. W każdym razie nic nie ściemniam - mówie serio. Żona mi przyniosła na kartce ułamek bo jej koleżanka dała że ten mój pierwszy programik nie działa. Jak to zobaczyłem ... w mianowniku chyba z 19 cyfr : )

W tym pierwszym progsie, nie wiedziałem jeszcze o algorytmie Euklidesa ... (aż wstyd), a tam wszystko się rozchodzi o to, żeby na końcu ten ułamek skrócić, to przy kilku cyfrach trwało to i trwało. A teraz zastosowałem ten algorytm, dodatkowo go optymalizując - program liczy wszystko w oka mgnieniu.

http://ge0dezja.republika.pl/files/mianowniki200.zip

0

Dzięki, w wolnym czasie zajmę się tym IntegerASM.
Tyle, że ja chcę zrobić zadanie na opss.safo.biz a tam chyba nie można robić wstawek z asemblera :) Więc chyba pozostanę przy tablicach...

1 użytkowników online, w tym zalogowanych: 0, gości: 1