amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > double prüfen auf NaN [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

26.02.2004, 20:37 Uhr

Inferno
Posts: 157
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

27.02.2004, 02:55 Uhr

AchimStegemann
Posts: 112
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

27.02.2004, 09:35 Uhr

Inferno
Posts: 157
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2004, 09:49 Uhr

gni
Posts: 1106
Nutzer
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)

[ - Antworten - Zitieren - Direktlink - ]

27.02.2004, 09:52 Uhr

gni
Posts: 1106
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2004, 13:47 Uhr

Inferno
Posts: 157
Nutzer
Hallo gni,

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

Gruß,

Inf

[ - Antworten - Zitieren - Direktlink - ]

27.02.2004, 14:17 Uhr

gni
Posts: 1106
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2004, 21:20 Uhr

Inferno
Posts: 157
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

28.02.2004, 08:43 Uhr

Solar
Posts: 3680
Nutzer
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.ä.).

[ - Antworten - Zitieren - Direktlink - ]

28.02.2004, 10:56 Uhr

Goos
Posts: 69
Nutzer
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:

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > double prüfen auf NaN [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.