Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Algorytm liczb dużej precyzji lub BCmath
s_w_ir
post
Post #1





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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.

Ten post edytował s_w_ir 5.06.2006, 11:10:31
Go to the top of the page
+Quote Post
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




http://cvs.php.net/viewcvs.cgi/php-src/ext/bcmath/


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
Jabol
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
s_w_ir
post
Post #4





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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.

Ten post edytował s_w_ir 5.06.2006, 19:36:07
Go to the top of the page
+Quote Post
bpawlik
post
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 13.01.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował bpawlik 6.06.2006, 10:29:12
Go to the top of the page
+Quote Post
s_w_ir
post
Post #6





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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...

Ten post edytował s_w_ir 6.06.2006, 20:34:12
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:37