Biorąc pod uwagę oświadczeniaKonwersja Float na podwójną - Najlepsza asercja w teście jednostkowym?
float f = 7.1f;
double d = f;
Co możemy dochodzić w badanej jednostki o d?
Na przykład to nie działa:
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)
Najlepszym sposobem znalazłem tak daleko jest do konwersji wartości powrotem:
float f2 = (float)d;
Console.WriteLine(f2 == f); // true
Która byłaby taka sama jak brute sposób na powiedzenie:
Console.WriteLine(d == 7.1f); // 7.1f implicitly converted to double as above
To pytanie NIE dotyczy dokładności double i float, ale naprawdę JUST o pragmatycznym pytaniu, w jaki sposób test jednostkowy najlepiej opisuje ograniczenia d. W moim przypadku d jest wynikiem konwersji, która występuje w kodzie generowanym przez generowanie kodu lekkiego. Podczas testowania tego generowania kodu muszę przedstawić twierdzenia dotyczące wyniku tej funkcji, co ostatecznie sprowadza się do prostego pytania powyżej.
Z jakiego schematu testów jednostkowych korzystasz? Niekoniecznie możesz twierdzić przeciwko warunkowi, który wyprowadzasz np. 'Assert.IsTrue (warunek)', możesz być w stanie użyć np. 'Assert.AreEqual (value1, value2)' który może obsługiwać równoważność między formatami numerycznymi. – StuperUser
Nadal nie jestem pewien, co próbujesz przetestować tutaj. Podwójne ma większą precyzję niż pływak, a zatem prawie nigdy nie będą "równe" sobie nawzajem. – CodeCaster
Jeśli pominiesz końcową wartość f stałej używanej do inicjowania float, może być jeszcze gorzej, zobacz przykładowy skrypt tutaj http://stackoverflow.com/questions/13276862/cc-notation-of-double-floatingpointpoint -values / 13279512 # 13279512 –