amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > double prüfen auf NaN [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2004-02-26, 20:37 h

Inferno
Posts: 157
User
Hallo,

Es handelt sich hier um ein Projekt in Storm C 4 für Amiga bzw. gcc für Mac. Ich möchte gerne eine double-Zahl auf NaN prüfen. Wenn ich dazu isnan(value) benutze, muß ich aber die gcclibnix mit einbinden, was ich eigentlich nicht möchte.
Gibt es noch 'ne andere, Amiga-spezifisch Funktion, die das gleiche macht, oder muß ich die Bitkombinationen "manuell" überprüfen?

Gruß,

Inf

[ - Answer - Quote - Direct link - ]

2004-02-27, 02:55 h

AchimStegemann
Posts: 112
User
ich könnte mich jetzt auch irren.. imho ist der Hex-Wert für NAN 0x7fffffff 0xffffffff (zwei longs).

dementsprechend sieht eine isnan-Fkt so aus.

BOOL isnan(double value)
{
BOOL ret=0;
long *p=(long *)&value; // zwingt value auf den stack
if(p[0]==0x7fffffff && p[1]==0xffffffff) ret=1;
return ret;
}

Gruß
Achim

[ - Answer - Quote - Direct link - ]

2004-02-27, 09:35 h

Inferno
Posts: 157
User
Vielen Dank, habe noch mal recherchiert.
NaN sind alle Zahlen, für die gilt

(high & 0x7FF00000) == 0x7FF00000

(sprich exponent = 2047)

und mantisse <> 0, also high & 0x000FFFFF != 0 oder lo != 0

Gruß,

Inf.

[ - Answer - Quote - Direct link - ]

2004-02-27, 09:49 h

gni
Posts: 1106
User
Zitat:
AchimStegemann:
BOOL isnan(double value)
{
BOOL ret=0;
long *p=(long *)&value; // zwingt value auf den stack
if(p[0]==0x7fffffff && p[1]==0xffffffff) ret=1;
return ret;
}

Ich kann nicht sagen ob richtig ist (die Implmentationen, die ich kenne sehen anders aus), aber der Returnwert ist "int". Zudem muß man (und sollte man) diese Funktion nicht selber schreiben, das sie üblicherweise bereits in den Compilerbibliotheken steckt und in <math.h> deklariert wird (zusammen mit isinf)

[ - Answer - Quote - Direct link - ]

2004-02-27, 09:52 h

gni
Posts: 1106
User
Zitat:
Inferno:
Vielen Dank, habe noch mal recherchiert.
NaN sind alle Zahlen, für die gilt

(high & 0x7FF00000) == 0x7FF00000

(sprich exponent = 2047)

und mantisse <> 0, also high & 0x000FFFFF != 0 oder lo != 0

Für IEEE stimmt das. Ansonsten nimm <math.h> und isnan(). Fertig.

[ - Answer - Quote - Direct link - ]

2004-02-27, 13:47 h

Inferno
Posts: 157
User
Hallo gni,

wie gesagt, um isnan zu verwenden, muß ich die gcclibnix mit einbinden. Das wollte ich vermeiden.

Gruß,

Inf

[ - Answer - Quote - Direct link - ]

2004-02-27, 14:17 h

gni
Posts: 1106
User
Zitat:
Inferno:
wie gesagt, um isnan zu verwenden, muß ich die gcclibnix mit einbinden. Das wollte ich vermeiden.

Ich kann Dein Problem nicht nachvollziehen. Die Benutzung von isnan() als Teil von der Standardbibliotheken sollte keine Schwierigkeiten breiten. Das hat doch mit libnix nichts zu tun.

[ - Answer - Quote - Direct link - ]

2004-02-27, 21:20 h

Inferno
Posts: 157
User
Hi gni,

wenn ich die isnan - Funktion benutze, ohne diese Library mit einzubinden, erhalte ich eine Linker-Fehlermeldung, daß er das Symbol _isnan nicht findet. Die Funktion ist anscheinend nicht in einer der drei Libs (storm.lib, amiga.lib, debug.lib) enthalten.

Gruß,

Inf.

[ - Answer - Quote - Direct link - ]

2004-02-28, 08:43 h

Solar
Posts: 3680
User
Kann ich mir eigentlich nicht vorstellen - math.h ist nun einmal Standard. Schau' mal in die StormC-Anleitung, evtl. mußt Du einen speziellen Linker-Befehl zum Einbinden der Mathe-Bibliotheken angeben (-lm o.ä.).

[ - Answer - Quote - Direct link - ]

2004-02-28, 10:56 h

Goos
Posts: 69
User
Zitat:
Original von Inferno:
Hi gni,

wenn ich die isnan - Funktion benutze, ohne diese Library mit einzubinden, erhalte ich eine Linker-Fehlermeldung, daß er das Symbol _isnan nicht findet. Die Funktion ist anscheinend nicht in einer der drei Libs (storm.lib, amiga.lib, debug.lib) enthalten.

Gruß,

Inf.


komisch bei mir funtzt es habe nur storm.lib und amiga.lib dazugelinkt.
Sicher das Du das letzte Update von StormC4 drauf hast?
Ich kann mich erinnern, dass ich auchmal so ein Problem mit einem anderen Symbol hatte, was er nach dem Update aufeinmal fand.

gruss Goos :smokin:

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > double prüfen auf NaN [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.