Seite 1 von 1

Eigenartige FloatWerte : 1.#QNAN und -1.#IND ???

Verfasst: 22.06.2006 00:10
von PureLust
In einer meiner Routinen funktionierte nach etlichen Berechnungen plötzlich etwas nicht so wie es sollte (Fehlberechnung).
Somit wollte ich das also mal per Debugger überprüfen.
Die Variablenliste des Debuggers gab mir für die fehlberechnete Variable (ySpeed.f) folgende Werte zurück:

ySpeed.f = -1.#IND
bzw.
ySpeed.f = 1.#QNAN

Hat jemand eine Ahnung was diese Werte zu bedeuten haben?

PS: Ist ein PB4 Code

Verfasst: 22.06.2006 00:25
von Deeem2031

Verfasst: 22.06.2006 01:48
von Zaphod
Und IND könnte für "Unendlich" stehen.

Verfasst: 22.06.2006 08:29
von #NULL
bei infinite wird eigentlich
1.#INF
ausgegeben

Code: Alles auswählen

i=0
f.f=3/i
Debug f
hier
http://www.purebasic.fr/english/viewtop ... hlight=ind
werden einige dieser sonderwerte besprochen (ASM).

woandersher, nicht PB:
The -1.#IND was the result of taking the inverse cosine of x and
ofcourse there's no acos of a number lower than -1 or higher than 1.
(quelle - ein paar messages weiter)
#IND wird wohl für indefinite stehen, viellecht bei berechnungen die zur laufzeit einfach nicht sinnvoll ausgeführt werden konnten.

Verfasst: 22.06.2006 10:59
von Zaphod
Stimmt, da hast du wohl recht.

Mußte mir erst wieder den Unterschied zwischen NaN und Undefiniert bewußt machen ;)

Verfasst: 22.06.2006 11:54
von PureLust
Moin zusammen,

nachdem ich mich in dieses Thema nun etwas eingelesen habe komme ich damit wohl weiter - vielen Dank. :allright:

Mir wäre zwar lieber, dass solche - nennen wir sie mal Formel- oder auch Berechnungsfehler auf Grund fehlerhafter Werte - eine Exception auslösen würden, damit man den exakten Ursprung besser lokalisieren könnte - aber ich werde ihn schon irgendwie finden. ;)
Ich werd's mal mit der IsInforNaN(x.f) Prozedor aus #NULLs Link versuchen.

Also nochmals vielen Dank für die Hilfe. :allright:

Grüße, PureLust.


Auf Grund eines bösen Irrtums:
[######## NACHTRAG ########]


Die in #NULLs verlinktem Thread gepostete Lösung mit der Assembler-Prozedur
IsInforNaN(x.f) funktioniert leider nicht unter PB4.
Unter PB3.94 funnzt es jedoch alles problemlos. :cry:
Hätte jemand evtl. eine PB4-kompatible Variante davon?

(Scheinbar klappt der Compare nicht mehr oder ich kriege den JE zum Label @ nicht ans laufen. :|
Sorry, aber meine eigenen Assemblerkenntnisse sind halt noch auf dem 68000er Stand von von 20 Jahren.)