die Aussagen GegebenFloat to Double-Konvertierung - Beste Behauptung in einem Unit-Test?
float f = 7.1f;
double d = f;
Was in einem Unit-Test über d können wir behaupten?
Zum Beispiel funktioniert das nicht:
Console.WriteLine(d == 7.1d); // false
Console.WriteLine(d < 7.1d + float.Epsilon); // true by luck
Console.WriteLine(d > 7.1d - float.Epsilon); // false (less luck)
Der beste Weg, ich ist bisher gefunden, den Wert zu konvertieren zurück:
float f2 = (float)d;
Console.WriteLine(f2 == f); // true
Welches ist das gleiche wie die Brute wäre weg zu sagen
Console.WriteLine(d == 7.1f); // 7.1f implicitly converted to double as above
Diese Frage bezieht sich NICHT auf Doppel- und Float-Präzision, sondern auf die pragmatische Frage, wie ein Unit-Test die Grenzen von d am besten beschreiben kann. In meinem Fall ist d das Ergebnis einer Umwandlung, die in einem Code auftritt, der durch eine leichte Codeerzeugung erzeugt wird. Beim Testen dieser Codegenerierung muss ich Aussagen über das Ergebnis dieser Funktion machen, und dies läuft letztlich auf die einfache Frage oben hinaus.
Welches Unit Testing Framework verwenden Sie? Sie können sich nicht unbedingt gegen eine Bedingung aussprechen, die Sie z. 'Assert.IsTrue (Bedingung)', können Sie möglicherweise z. 'Assert.AreEqual (value1, value2)', das die Äquivalenz zwischen numerischen Formaten verarbeiten kann. – StuperUser
Ich bin mir immer noch nicht sicher, was Sie hier testen möchten. Ein Double hat mehr Präzision als ein Float und wird daher kaum "gleich" sein. – CodeCaster
Wenn Sie das letzte f in der Konstante, die für die Initialisierung des Floats verwendet wird, weglassen, könnte es sogar noch schlimmer sein. Ein Beispiel finden Sie hier http://stackoverflow.com/questions/13276862/cc-notation-of-double-floating-point -Werte/13279512 # 13279512 –