🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #92886

Re: Największa liczba powtórzeń pętli for ...

#92886
From: Tygrys
Date: Wed, 12 Aug 2009 08:14
73 lines
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-mail
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>

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