Article View: be.comp.programming
Article #12663Re: Bizar probleem... C/C++ (30 milj instr / sec)
From: Bart.Vanhauwaert
Date: Thu, 25 Oct 2001 14:17
Date: Thu, 25 Oct 2001 14:17
55 lines
2869 bytes
2869 bytes
Jo Voordeckers <Jo.Voordeckers@pandora.be> wrote:
> So far lukt alles tot de plaats waar de minima en maxima van de double &
> float berekend worden...het tellen duurt zo ongelooflijk lang (zo'n 30
> miljoen ++jes per seconde schat ik)...Ik weet het ik kan ook de
> constanten gebruiken uit limits.h en values.h maar ik dacht het eens the
> really hard way te doen...
Gebruik std::numeric_limits<>.
Vergeet 'de hard way'. Wat je wil is onmogelijk zonder verregaande
veronderstellingen te doen over je platform die niet door standaard
C++ gegarandeerd zijn.
Tussen haakjes:
Puur algoritmisch gesproken gebruik je nu een rekenkundige reeks
om naar oneindig te gaan. Met een meetkundige reeks ben je er
sneller.
> Is het normaal dat dit zo lang (toch al een half uurtje bezig en zit nog
> maar aan enkele 100 miljard) duurt op een Athlon Thunderbird 800Mhz
> OC'ed @970Mhz ?
De kans is heel groot dat je op den duur 'niet meer vooruit geraakt'.
> Ahja ik kon natuurlijk een waarde nemen die 1 exponent lager ligt dan de
> maximumwaarde van een double dan duurt het al veel minder lang maar
> toch... Is dit feitelijk traag/snel???
> Hier de desbetreffende code voor double:
> double dmin=0,dmax=0;
> while(dmin>=0) dmin++; // berekening van maximum voor double
> dmax = dmin - 1; // " " minimum " "
En dit is natuurlijk onzin. Vooreerst dmin++ kan (en zal) een nop
zijn voor een double. Bovendien, waar haal je het idee dat
dmax = dmin - 1. Ook dat is meestal verre van waar. Het klopt
enkel voor integers in een welbepaalde (maar weliswaar veel
gebruikte) bitrepresentatie.
> Iemand een idee, opmerking, ... don't hessitate ;-)
Ja. Toch maar std::numeric<limits> gebruiken. Zelfs een rekenkundige
reeks zal je niet zoveel verder helpen.
std::cout << "max(float) "
<< std::numeric_limits<double>::max() << std::endl;
is trouwens veel cooler.
cu bart
--
http://www.irule.be/bvh/
Technical Details
Message-ID:
<it69r9.jo9.ln@10.0.0.2>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!skynet.be!skynet.be!louie!not-for-mailReferences:
<MPG.164151c4c48e70429896a9@news.telenet.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,e86502c93571e9e2
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-10-25 08:04:22 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!skynet.be!skynet.be!louie!not-for-mail
Sender: - <bvh@ns1.irule.be>
From: Bart.Vanhauwaert@nowhere.be
Subject: Re: Bizar probleem... C/C++ (30 milj instr / sec)
Newsgroups: be.comp.programming
References: <MPG.164151c4c48e70429896a9@news.telenet.be>
User-Agent: tin/1.4.4-20000803 ("Vet for the Insane") (UNIX) (Linux/2.2.17-21mdksecure (i686))
Date: Thu, 25 Oct 2001 16:17:22 +0200
Message-ID: <it69r9.jo9.ln@10.0.0.2>
Lines: 55
NNTP-Posting-Host: 194.78.202.248
X-Trace: 1004022260 reader0.news.skynet.be 21086 194.78.202.248
X-Complaints-To: abuse@skynet.be