Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Algorytm liczb dużej precyzji lub BCmath
Forum PHP.pl > Inne > Hydepark
s_w_ir
Witam.
Zapewne wykaże się wręcz lamerską niewiedzą, ale interesuje mnie gdzie moge dostać(znaleźć) źródło funkcji(wielu nie jednej winksmiley.jpg ) bcmath bądź dowiedzieć się jak jest skonstruowany programowo typ double, nie chodzi mi tu o mantysy itp. sprawy , tylko bardziej jak to prgramowo wysymulować.
Mój problem polega na tym że musze napisać program wyliczający liczbe e z dowolną precyzją w C. Wiadomo że żaden typ nie daje nieskończonej precyzji(mój też nie będzie), ale jakoś musze sie do tego zabrać. Myślałem żeby każdą kolejną liczbe po przecinku wciskać w tablice(osobne pole), ale żeby to zrobić musze jakoś najpierw dostać te liczby z powyżej 15 miejsca po przecinku.
Inna opcja to złożyć jakiś własny typ zmiennych, tylko czy da rade złożyć go z kilku double które razem dadzą np. 50 miejsc po przecinku?
Jak uda mi się coś wykombinować to dam znać smile.gif
Pozdrawiam.
Jabol
A myślałeś o ułamkach zwykłych? Mógłbyś część całkowitą przechowywać jako zwykły int i resztę jako dwa int - dzielną i dzielnik (a+b/c). Co prawda znając życie szybko by się wyczerpał zakres integera w ułamku, ale może przy odpowiednim skracaniu będzie ok?
s_w_ir
Dziękuje za odpowiedzi. Przeglądam źródła bcmath, ale jest to dość zagmatwane. Potrafi ktoś prostymi słowami opsiać na czym polega magia bcmath?(oczywiście dalej sam kombinuje)

@jabol Najpierw OT: gdy przybyłem na forum miałeś swój 1000 post odpowiadając mi na mój pierwszy, teraz będziesz miał 2000:)
Problem w tym że nawet tak nic nie zdziałam bo nie mam skąd brać liczb powyżej 15 miejsca po przecinku. Skracać też nie ma co bo jak skracać:
Kod
0.456521325765345232546...2344653...5653...

No chyba że jest coś czego nie rozumiem w Twoim pomyśle to mógłbyś go rozwinąć? Dziękuje za pomoc.
bpawlik
Z tego co pamiętam, to obliczenia na dużych liczbach wykonuje się z pomocą wielomianów (i tablic). Ale niestety szczegółów nie pamiętam.
Popatrz także na metodę Monte Carlo
http://www.i-lo.tarnow.pl/edu/inf/alg/calki/pages/005.php

ewentualnie tu masz liczbe e z duuuuża ilością miejsc po przecinku, jak nie będziesz musiał pokazywać źródła programu to rozwiązanie nasuwa się samo ....

http://antwrp.gsfc.nasa.gov/htmltest/gifcity/e.1mil
s_w_ir
Dziękuje, ale program musze napsisać i chce(naucze się pewnej rzeczy o której od dawna myślałem). Będe poszukiwał w kierunku wielomianów w takim razie.

EDit. Jakoś nie jestem sobie w stanie wyobrazić nawet jak można to programowo stworzyć, tzn. jak obliczyć 16, i dalej, miejsce po przecinku podczas gdy long double przyjmuje tylko 15 miejsc po przecinku. Do liczby Pi znalazłem wzór na obliczanie k-tej liczby po przecinku(zresztą moge obliczyć Pi lub e to nieważne, chodzi o to żeby przedstawić sposób przechowywania tych liczb), ale to nie jest to czego szukam. Może byc nawet coś bardzo obciążające procesor, ale byle można to uznać za metodę.....
....pare skeund później....
właśnie wpadłem na pomysł żeby liczyć to(1+1/n)^n i co pare(co każdą?) iterację, mnożyć to przez 10 i początek wsadzać do tablicy to co znika z lewej strony. Zresztą rozpiszę to zaraz na kartce i się okaże czy to możliwe...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.