3

+/- Infinity に変換せずに 64 ビット浮動小数点数を 32 ビット浮動小数点数に変換できるかどうかを確認する標準的な方法はありますか?

後で+/- Infをチェックできることはわかっています。

Convert.ToSingle()これはしません。

4

1 に答える 1

2

double値が無限大にならずdに に変換されるかどうかをテストするために、 の絶対値が as と書かれた値(つまり、16 進数)を厳密に下回っているかどうかをテストできます。この数は、float に変換できる double と変換できない double の間の正確な制限です。floatddouble3.4028235677973366e+380x1.ffffffp+127

少し拡張すると、最後の有限フロートは次のようになります。

0x1.fffffep+127   (3.4028234663852886e+38 in decimal)

タイプがより多くの指数ビットを持っていた場合、次のfloat数は次のようになります。float

0x2.000000p+127   (3.4028236692093846e+38 in decimal)

後者よりも前者に近い数値は前者に切り捨てられます。極限は 2 つの数値の中間点です。

0x1.ffffffp+127   (3.4028235677973366e+38 in decimal)
于 2013-05-31T12:51:39.497 に答える