Ich habe einige C# Unit-Tests, die einige float/double-Operationen durchführen, und ich möchte Einheit testen sie. Assert.AreEqual ist aufgrund von Rundungsfehlern nicht ausreichend.Unit Tests Float-Operationen in Visual Studio 2008 Pro
Nehmen Sie die Einheitenumrechnung als Beispiel. 10,5 Meter zu Fuß hat einen Umrechnungsfaktor von 3,281, also bekomme ich 34,4505. Die Verwendung eines genaueren Umrechnungsfaktors gibt mir 34,4488189. Ich möchte das innerhalb von beispielsweise 0,1 testen (also würde 34,3488-34,5488 den Test bestehen).
ich konnte sicher manuell den Wert mit einer Toleranz in meinem Unit-Test testen, aber das ist sehr repetitiv und die Fehlermeldung sehr beschreibend wäre nicht (wieder ohne meine eigene Assert-Fehlernachricht schreiben):
Assert.IsTrue(Math.Abs(34.4488189 - value) < 0.1);
Wie kann ich meine Float-Operationen innerhalb einer bestimmten Fehlertoleranz testen? Ich kann keine Assert-Klassen finden, die das tun, die mit VS kommen. Vermisse ich es oder muss ich mein eigenes rollen?
Gibt es Standardverfahren zum Testen von Floats/Doubles?
Hah! 18 Überladungen für AreEqual. Kein Wunder, dass ich es nicht verstanden habe. –
Warnung, mit 'double.Epsilon' wird nicht tun, was Sie tun wollen. Epsilon ist der kleinste Wert für die doppelte Genauigkeit. Dies gilt nur, wenn Sie Werte vergleichen, die in der Größenordnung von 10^-324 liegen, was sehr unwahrscheinlich ist.Was Sie tun möchten, ist, doppelte Werte bis zur letzten Ziffer zu vergleichen, die sie darstellen können. Daher kann die Toleranz tausend sein, wenn Sie Werte vergleichen, die sich in den Billiarden befinden. Das Schlagwort ist "ULP" (Einheiten an letzter Stelle). siehe http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm –