Bardzo duża dokładność obliczeń

0

Chce napisać program liczący bardzo dokładnie rozwinięcia pewnych liczb.
Dokładność jaką chce osiągnąć to 10^(-32000000).
I nie mam zbytnio pomysłu na strukturę przechowująca i operującą na takich liczbach.
Macie jakieś pomysły jak to zrobić w c++?

Pozdrawiam.

0

wiesz jak napisać bardzo duże liczby całkowite?
Jeśli tak to to będzie krok pierwszy.
Potem tworzysz klasę z dwoma bardzo dużymi intami: pierwsza odpowiada za reprezentację cyfr a druga odpowiedzialna jest za wykładnik.

Pierwszą cześć możesz przeskoczyć stosując bibliotekę vlong.

0

a co z operacjami na tak stworzonych liczbach - dodawanie, odejmowanie, mnożenie?

0

Możesz też zrobić to za pomocą tablicy znaków (char[]) przechowywanej w strukturze. Dla struktury możesz zdefiniować odpowiednie operatory. Jak? Za pomocą liczenia "pod kreskę" zazwyczaj nie wyskoczysz powyżej 81 przy mnożeniu :D jedyny problem jest z dzieleniem, bo to dość skomplikowany algorytm, jak na tą grupę oczywiście.

0
Liczba Pi" (pl.wikipedia.org/wiki/Pi) napisał(a)

We wrześniu 1999 roku obliczono π z dokładnością 2,0615×10^11 miejsc po przecinku. Dokonał tego Takahasi przy pomocy komputera HITACHI SR8000.

0
tomii napisał(a)

Macie jakieś pomysły jak to zrobić w c++?

Użyj bibliotek?
http://gmplib.org/
http://www.gnu.org/software/gsl/

edit
adf88, wiesz, jak on potrzebuje takiej dokładności, to pewnie ma pod ręką superkomputer, więc 100GB wte czy wewte nie zrobi większej różnicy :))

i tomil: 10^(-32000000) ma po przecinku <s>tysiące</s> dziesiątki tysięcy razy więcej zer niż jest cząsteczek we wszechświecie :)

0

Jedna taka liczba zajęłaby ponad 100 GB. Powodzenia.

0

adf, jak to policzyłeś? mi wychodzi 1032000000 < 1632000000 = 2^128000000, a ta ostatnia zajmie 16MB.
nie zmienia to faktu, że nawet napisane w asemblerze wykonanie najprostszych obliczeń (jak dodawanie) zajmie setki ms, a ciut bardziej zaawansowanych (typu mnożenie) pewnie długie minuty.

0

Fakt, rąbnąłem się o rząd (MB -> GB) :p

0
adf88 napisał(a)

Fakt, rąbnąłem się o rząd (MB -> GB) :p

czyli 100 MB ? dalej nie wiem jak to liczyłeś
nawet jakby każdą cyfrę zapisać w jednym bajcie to by zajęło 30 MB, zapisując w BCD już 15, a normalnie będzie jeszcze mniej ...

0

@camel leon, weź Ty się wreszcie zarejestruj a nie piszesz pod losowymi nickami czy inszymi, za każdym razem innymi. Aktualnie masz na koncie 857 postów...

0

Zapomniałem jeszcze przez 8 podzielić :p kurde zaćmienie jakieś :p

log2(10^32000000) b = 32000000*log2(10) b = (32000000/1024/1024/8)*ln(10)/ln(2) MB = 12,7 MB

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