Article View: pl.comp.lang.pascal
Article #92886Re: Największa liczba powtórzeń pętli for ...
From: Tygrys
Date: Wed, 12 Aug 2009 08:14
Date: Wed, 12 Aug 2009 08:14
73 lines
4458 bytes
4458 bytes
Tomasz Kaczanowski pisze: > Tygrys pisze: >> Tomasz Kaczanowski pisze: >>> Tygrys pisze: >> >>>> Zamień pętlę for na while i będzie działać. >>> >>> Nie będzie działać, a przynajmmniej nie będzie działać poprawnie. >>> Chyba, że ta Twoja rada miała zaszkodzić pytającemu? Ale chyba mamy >>> pomagać, a nie szkodzić! >>> >>> >> A tak konkretnie, dlaczego ? > > Ze względu na arytmetykę liczb zmiennoprzecinkowych? Może się zdziwić, > gdy przy dużych liczbach doda jedynka, a wartość się nie zmieni... > Przecież sam napisał, że chodzi mu o większy zakres... Liczby > zmiennoprzecinkowe, sa przydatne i warto ich używać w wielu aspektach, > ale należy wiedzieć o ich ograniczeniach i robić to z rozmysłem... > E no, masz rację, niemniej problemem nie było "do ilu się da to zwiększyć" tylko, że trzeba poszerzyć zakres, a nie chce się kompilować z double - na tak sformułowane pytanie dałem jak sądzę poprawną odpowiedź. :-) Autor nie określił, jak duże liczby chce testować. Napisał tylko, że chce większe niż longword. ZAWSZE będzie jakaś granica wielkości, czy to wynikająca z pojemności zmiennej czy tego co piszesz. :-) Zmienna typu double mimo wszystko zapewnia większy zakres niż longword, a najlepiej na tym wszystkim wypada int64 Przez "będzie działać" rozumiem przejdzie proces kompilacji, jak również spełni wymagania autora by zakres był większy. Longword to mimo wszystko marne 4 miliardy. :-) Więc żeby domknąć ten temat należało by dopowiedzieć: W programie autora można zwiększyć zakres obliczanych wartości, jednakże zmiana typu zmiennej na np. double nie spowoduje zaraz zwiększenia zakresu pętli do 10e309 :-) Natomiast spowoduje zwiększenie tego zakresu do około 10e16, w stosunku do 10e9 którą zapewnia typ longword. --------- Jednym słowem - nie potęga liczby, a ilość cyfr znaczących ma znaczenie. --------- W tym kontekście najlepsze rezultaty da użycie typu int64, lub - w przypadku braku czegoś takiego - comp lub extended, co umożliwi uzyskanie zakresu 10e19, z czego comp będzie bardziej na miejscu jako typ semi-całkowity, a extended może dać zakres minimalnie większy. Natomiast do obliczania takich dużych wartości całkowitych należało by użyć specjalizowanej klasy, niemniej na tym poziomie to bym raczej nie sugerował takich rozwiązań. Jeżeli już, to raczej zrobienie z części programu procedury i wywoływanie jej w pętli i sumowanie rezultatów w liczbach rzeczywistych, co pozwoliło by w najprostszym ujęciu rozszerzyć zakres obliczeń do 10e38. Jakby to było mało, to można ten schemat powielić kilka razy, zwiększając za każdym razem precyzję o te 19 cyfr. Choć, w przypadku takiego rozwiązania lepiej by było pozostać pętlę for i pozostać z licznikiem całkowitym ze względów wydajnościowych - użycie koprocesora do dodawania jedynki to mimo wszystko przerost formy nad treścią. :-) --------- Czy teraz Tomku, czujesz się usatysfakcjonowany wyjaśnieniem dla autora? I, czy gdyby tak czasem chodziło mu o zwiększenie zakresu z 4 miliardów do powiedzmy 4 bilionów poprzednia odpowiedź nie była by wystarczająca ? :-))) Tygrys
Technical Details
Message-ID:
<h5tu8h$7tp$1@nemesis.news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mailReferences:
<cf70e79d-1ae1-4c46-9765-3cee4392345d@p23g2000vbl.googlegroups.com> <h5q62n$ecm$1@atlantis.news.neostrada.pl> <h5r37q$jup$2@news.onet.pl> <h5s0tj$npt$1@atlantis.news.neostrada.pl> <h5tn5m$d3s$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail From: Tygrys <news15@wywalto.tygrys.com.pl> Newsgroups: pl.comp.lang.pascal Subject: Re: Największa liczba powtórzeń pętli for ... Date: Wed, 12 Aug 2009 10:14:40 +0200 Organization: TP - http://www.tp.pl/ Lines: 73 Message-ID: <h5tu8h$7tp$1@nemesis.news.neostrada.pl> References: <cf70e79d-1ae1-4c46-9765-3cee4392345d@p23g2000vbl.googlegroups.com> <h5q62n$ecm$1@atlantis.news.neostrada.pl> <h5r37q$jup$2@news.onet.pl> <h5s0tj$npt$1@atlantis.news.neostrada.pl> <h5tn5m$d3s$1@news.onet.pl> NNTP-Posting-Host: aca110.internetdsl.tpnet.pl Mime-Version: 1.0 X-Trace: nemesis.news.neostrada.pl 1250065489 8121 83.16.52.110 (12 Aug 2009 08:24:49 GMT) X-Complaints-To: usenet@news.neostrada.pl NNTP-Posting-Date: Wed, 12 Aug 2009 08:24:49 +0000 (UTC) User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) In-Reply-To: <h5tn5m$d3s$1@news.onet.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit