/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Grænseværdier for double i C++
Fra : Hansen


Dato : 08-04-02 22:10

Hej

Jeg har netop færdiggjort en lommeregner til en skoleopgave. I denne
lommeregner kontrollerer jeg, om et tal er uden for en double's
grænseværdier med følgende test:

if (tal < -1.7E308 || tal > 1.7E308)
// fejl
else
// udfør beregning

Grænseværdierne (-1.7E308; 1.7E308) har jeg fået fra en C++ lærebog, hvor de
var opgivet som cirkaværdier. Mit problem er bare, at jeg gerne vil teste på
den eksakte værdi af en double, og ikke kun tilnærmede værdier. Fra Java
kender jeg, at overflowes en double, genereres en exception. Jeg har kigget
lidt på exception handling i C++, men har ikke været heldig, at finde noget,
jeg kan bruge.

Jeg håber, der er en, der kan hjælpe mig.

På forhånd tak

--

Hansen

To reply, remove NOSPAM in email.



 
 
Bertel Lund Hansen (08-04-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 08-04-02 22:24

Hansen skrev:

>Grænseværdierne (-1.7E308; 1.7E308) har jeg fået fra en C++ lærebog, hvor de
>var opgivet som cirkaværdier. Mit problem er bare, at jeg gerne vil teste på
>den eksakte værdi af en double

I ren C kan du inkludere float.h og derefter benytte FLT_MAX, men
det kan godt være at tallene kan blive større fordi konstanten
kun skal være en garanteret værdi.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Ivan Johansen (08-04-2002)
Kommentar
Fra : Ivan Johansen


Dato : 08-04-02 22:39

Hansen wrote:

> Jeg har netop færdiggjort en lommeregner til en skoleopgave. I denne
> lommeregner kontrollerer jeg, om et tal er uden for en double's
> grænseværdier med følgende test:
>
> if (tal < -1.7E308 || tal > 1.7E308)
> // fejl
> else
> // udfør beregning

Følgende er den portable måde at gøre det på:

if (tal < std::numeric_limits<double>::min() || tal >
std::numeric_limits<double>::max())
// fejl
else
// udfør beregning


Ivan Johansen


Ivan Johansen (08-04-2002)
Kommentar
Fra : Ivan Johansen


Dato : 08-04-02 22:41

Jeg glemte lige at sige at du skal #include <limits> først.

Ivan Johansen


Hansen (08-04-2002)
Kommentar
Fra : Hansen


Dato : 08-04-02 22:48

Jeg takker for det hurtige svar.

Jeg vil sove på det, og afprøve det imorgen.



--

Hansen

To reply, remove NOSPAM in email.



Jonas Meyer Rasmusse~ (09-04-2002)
Kommentar
Fra : Jonas Meyer Rasmusse~


Dato : 09-04-02 08:21

Hejsa

"Ivan Johansen" <NG@Padowan.dk> wrote in message
news:3CB20DFE.4080201@Padowan.dk...
> if (tal < std::numeric_limits<double>::min() || tal >
> std::numeric_limits<double>::max())

Giver det overhovedet mening?
Hvordan vil I putte en værdi ind i tal der er mindre end min(), eller
størrere
end max(), de er jo per definition mindst og størst.
... så er der overhovedet nogen pointe med at tjekke det?

mvh JOnas



Mogens Hansen (09-04-2002)
Kommentar
Fra : Mogens Hansen


Dato : 09-04-02 09:44


"Jonas Meyer Rasmussen" <meyer_remove_@diku.dk> wrote

> "Ivan Johansen" <NG@Padowan.dk> wrote

> > if (tal < std::numeric_limits<double>::min() || tal >
> > std::numeric_limits<double>::max())
>
> Giver det overhovedet mening?
> Hvordan vil I putte en værdi ind i tal der er mindre end min(), eller
> størrere
> end max(), de er jo per definition mindst og størst.
> .. så er der overhovedet nogen pointe med at tjekke det?
>

Så længe typen af "tal" ikke er kendt, kan det muligvis give mening.
"tal" kunne jo være af typen "long double", som muligvis kan indeholder
større tal.

Venlig hilsen

Mogens Hansen



Claus Rasmussen (09-04-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 09-04-02 10:14

Jonas Meyer Rasmussen wrote:

> Hvordan vil I putte en værdi ind i tal der er mindre end min(), eller
> størrere > end max(), de er jo per definition mindst og størst.

Nej. Der findes specielle tal INF og -INF, der er hhv. større og
mindre end de tal, som min og max giver dig.

-Claus


Martin Ehmsen (09-04-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 09-04-02 11:18

Hansen <sh.dkNOSPAM@get2net.dk> wrote:
> Fra Java
> kender jeg, at overflowes en double, genereres en exception.

Dette er noget vrøvl.
Du kan ikke overflowe en double i Java.
Hvis du overskrider grænserne henholdvis opad- og nedadtil, vil
resultatet bliver +- infinity.
Hvilket _ikke_ er en exception.

Martin
--
I log into "FUCKYOU", (the help-desk enquiries username) and go into
mail.
   BOFH

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste