为什么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?
答案 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
是你需要的。