2009-04-15 10 views
3

なぜdouble.Epsilon != std::numeric_limits<double>::min()?私のPC上でdouble.Epsilon vs std :: numeric_limits <double> :: min()

double.Epsilon == 4.9406564584124654E-324とは、.NETで定義されている std::numeric_limits<double>::min() == 2.2250738585072014e-308

は、.NETから2.2250738585072014e-308取得する方法はありますか?

答えて

9

double.Epsilonは、の表記がの最小値を返します。 numeric_limits<double>::min()は、の正規化の最小値を返します。

double.Epsilonは、numeric_limits<double>::denorm_min()に相当します。

.NETで同等のものを取得する最も簡単な方法は、おそらく最小正規化数のビットパターンを計算してBitConverter.Int64BitsToDoubleを使用することです。

+0

正確に私が探していた答えの種類。 ありがとうございましたJon – sthiers

1

さてあなたは値を返すためにC++/CLIを使用することができます。

double epsilon() { return std::numeric_limits<double>::min(); } 

あなたががしたいと思うのはなぜ?なぜ彼らは同じでなければならないのですか?あなたは、浮動小数点数の端でスケートを避けるようにしてください。

-2

イプシロンは、2つの倍数間の最小限の差です。 (編集:正確ではない、この場合、最小の正の非ゼロ数です)。

double.MinValue 

が必要です。

+1

OPは、小さな正の数を探しています。 double.MinValueは大規模で負の数です。 –

+0

?私は、numeric_limitsは、最小ゼロ以外の数値では表現できない最小値を返します。 – nothrow

+0

質問: "std :: numeric_limits :: min()== 2.2250738585072014e-308" –

関連する問題