double.Epsilon vs. std :: numeric_limits <double> :: min()</double>

时间:2009-04-15 09:37:16

标签: .net c++ floating-point

为什么double.Epsilon != std::numeric_limits<double>::min()

在我的电脑上: double.Epsilon == 4.9406564584124654E-324并在.NET中定义 std::numeric_limits<double>::min() == 2.2250738585072014e-308

有没有办法从.NET获得2.2250738585072014e-308?

3 个答案:

答案 0 :(得分:9)

它们不同,因为double.Epsilon返回最小的可表示的值。 numeric_limits<double>::min()返回最小的规范化值。

基本上double.Epsilon相当于numeric_limits<double>::denorm_min()

在.NET中获取等效项的最简单方法可能是计算最小规范化数字的位模式并使用BitConverter.Int64BitsToDouble

答案 1 :(得分:1)

您可以使用C ++ / CLI返回值:

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

你为什么要这样?他们为什么必须一样?你应该尽量避免在浮点数的边缘滑冰。

答案 2 :(得分:-2)

Epsilon是两个双打之间可能存在的最小差异。 (编辑:不确切,在这种情况下,它是最小的正非零数)。

double.MinValue

是你需要的。