AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Nicht nachvollziehbares NaN

Ein Thema von implementation · begonnen am 21. Feb 2012 · letzter Beitrag vom 21. Feb 2012
Antwort Antwort
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

Nicht nachvollziehbares NaN

  Alt 21. Feb 2012, 16:29
Delphi-Version: 5
Hallo liebe Forengenossen,

irgendwie bin ich heute blind. An folgender Stelle bekomme ich immer NaN raus und finde meinen Fehler nicht

Delphi-Quellcode:
procedure SummonScreenfill(const callback: TStatPointEvent; const iter: TIteration; const col: TIterColorization; const w: complex; const x1,x2,y1,y2: double);
var x,y: word; itc: byte; fix: complex; at: complex;
begin
  for y := 0 to 479 do
    for x := 0 to 639 do begin
      at.r := x*((x2-x1)/640)+x1;
      if ((x2-x1))=nan then Writeln('oops =(');
      at.i := y*((y2-y1)/480)+y1;
      if at.i=nan then Writeln(':(');
      fix := iter(at,w,itc);
      callback(x,y,col(itc,fix));
    end;
end;
Laut Writeln sind x1=-1 und x2=1 (sowie y1=-1, y2=1). Demnach müsste x2-x1 doch =2 sein, oder erliege ich da einer geistigen Umnachtung? Aber nein, es werden immer brav 'oops =(' und '' ausgegeben.
Was mache ich falsch?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.514 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Nicht nachvollziehbares NaN

  Alt 21. Feb 2012, 16:38
Subtraktion und Addition können eigentlich nie NaN sein, es sei denn ein beteiligter Operand ist NaN - dann ist es das Ergebnis immer. Ich würde aber zunächst den Vergleich mit "nan" raus werfen, da es eine ganze Menge verschiedener NaNs gibt. Nimm da besser mal die Math.IsNan() Funktion, und schau was dabei rum kommt. (Die Konstante "nan" kannte ich bisher nichtmals )

Edit: Auch ggf. interessant
Zitat von Wikipedia:
Vergleicht man zwei NaNs auf Gleichheit, dann besteht Ungleichheit.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (21. Feb 2012 um 16:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Nicht nachvollziehbares NaN

  Alt 21. Feb 2012, 16:42
Ich kenne mich mit Freepascal nicht aus unter Delphi ist NaN = 0.0 / 0.0
so daß
Delphi-Quellcode:
 x1 := 1;
 x2 := 1;
 if (x1+x2) = nan then Showmessage('Err');
das bereits zu einer Exception führt, gibt es bei Dir IsNan() ?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.967 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Nicht nachvollziehbares NaN

  Alt 21. Feb 2012, 16:43
Die Konstante NaN ist zum manuellen Setzen da.
IsNan ist zum Prüfen.

Genauso wie beim Infinity, NegInfinity und IsInfinite,
bzw. wie beim True und dem IF.

if ((x2-x1))=nan then Writeln('oops =(');
Hätte man auch vor der Schleife prüfen können. Ändern tut es sich ja nicht.


Ach ja, wie NaN und Infinity ausgewertet werden, hängt von den FPU-Einstellungen ab.
NaN könnte auch locker mal als 0 interpretiert werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (21. Feb 2012 um 16:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Nicht nachvollziehbares NaN

  Alt 21. Feb 2012, 16:49
Ups, ja, ihr habt Recht
In Wirklichkeit ist es doch nicht NaN, sondern 2.

Tschuldigung
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.967 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Nicht nachvollziehbares NaN

  Alt 21. Feb 2012, 17:16
Wozu eigentlich diese Prüfungen?

Du willst doch nicht etwa überwachen, ob es irgendwelche Überläufe, in den Berechnungen gab.
Dafür sollte selbst Lazarus eine passende Überlaufprüfung bereitstellen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Nicht nachvollziehbares NaN

  Alt 21. Feb 2012, 17:50
Edit: Auch ggf. interessant
Zitat von Wikipedia:
Vergleicht man zwei NaNs auf Gleichheit, dann besteht Ungleichheit.
Interessanter ist hier, was nicht im Artikel steht: Wenn man einen konkreten Wert mit NaN vergleicht, kommt (anscheinend) immer Gleichheit heraus.

[edit]
Btw, was auf Wikipedia steht, stimmt zumindest unter meinem Delphi mit Standard-FPU-Einstellungen auch nicht. Ich habe gerade mal ein kleines Testprogramm geschrieben – egal, was man mit NaN vergleicht, sei es irgendeine Beliebige Zahl, NaN oder Infinity, es kommt immer True heraus.
[/edit]

Warum das so festgelegt wurde, weiß ich auch nicht. Ich bin auch schon ein paar mal darüber gestolpert, aber nicht weil ich mit der Konstanten NaN verglichen hätte, sondern weil ich zwei Variablen verglichen habe, von denen eine „zufälligerweise“ NaN war.

Geändert von Namenloser (21. Feb 2012 um 17:56 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf