Ich weiß, dass der Vergleich von zwei doubles
ist problematisch, wenn sie aus verschiedenen Berechnungen erhalten werden. Aber gilt das auch für den Fall, dass einer von ihnen eine Kopie (in Wert) des anderen ist? Die folgenden Zeilen erläutern das Szenario. Wenn ich ein Problem wie dieses haben,Vergleichen eines Schwimmers und seiner Kopie
double a,b;
a=randdouble();/*some double value*/
b=a;
Dann
Q1) Ist der Vergleich a==b
immer garantiert true
bei den C-Compiler zurückzukehren (ich habe gcc 6.1.1
)?
Q2) Würde die obige Antwort gleich bleiben, wenn ich die Variablen a
und b
im Heap-Speicher unter Verwendung von malloc
zuweise?
Q3) Wären die obigen Antworten gleich geblieben, wenn ich C-Compiler durch einen JAVA-Compiler (ich verwende Open JDK 1.7.0
) mit den notwendigen Syntaxänderungen natürlich ersetzen würde.
Edit 1: Die Zahlen a
und b
sind != NaN
1) Nein, 2) Ja, 3) Ja –
@EugeneSh. Warum würde "b = a" nicht dazu führen, dass "b == a" wahr ist? Dies ist eine direkte Kopie des Speichers oder eines Registers. –
@JoshSanford Die Frage dreht sich um * Garantie *. –