ステートメントを考えると
float f = 7.1f;
double d = f;
d に関する単体テストで何をアサートできますか?
たとえば、これは機能しません。
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)
これまでに見つけた最良の方法は、値を元に戻すことです。
float f2 = (float)d;
Console.WriteLine(f2 == f); // true
これは荒々しい言い方と同じだろう
Console.WriteLine(d == 7.1f); // 7.1f implicitly converted to double as above
この質問は、一般的に倍精度と浮動小数点の精度に関するものではなく、実際には、単体テストが d の範囲をどのように最もよく説明できるかという実用的な質問に関するものです。私の場合、d は、軽量コード生成によって生成されたコードで発生する変換の結果です。このコード生成をテストしている間、私はこの関数の結果についてアサーションを行う必要があり、これは最終的に上記の単純な質問に要約されます。