经过一番轻松阅读后,本文 http://msdn.microsoft.com/en-us/library/system.double.epsilon%28v=vs.110%29.aspx引起了我的兴趣:
我本以为是的,根据 MSDN 的声明,这两个声明是等效的:
表示大于零的最小正 Double 值。该字段是恒定的。
很想知道人们的想法。
编辑:找到一台打开 VS 的计算机并运行此测试。事实证明,是的,正如预期的那样,它们是等效的。
[Test]
public void EpsilonTest()
{
Compare(0d);
Compare(double.Epsilon);
Compare(double.Epsilon * 0.5);
Compare(double.NaN);
Compare(double.PositiveInfinity);
Compare(double.NegativeInfinity);
Compare(double.MaxValue);
Compare(double.MinValue);
}
public void Compare(double x)
{
Assert.AreEqual(Math.Abs(x) == 0d, Math.Abs(x) < double.Epsilon);
}
IL 代码似乎对此有所启发。
Epsilon 只是一个双数,小数部分为 1,符号为 0,指数为 0。
零是一个双数,小数部分为 0,符号为 0,指数为 0。
根据http://en.wikipedia.org/wiki/IEEE_754-1985 http://en.wikipedia.org/wiki/IEEE_754-1985,按顺序比较具有相同符号和指数的浮点数,这意味着 (x
现在,是否有可能得到一个不是分数 = 0、指数 = 0 的零(我们不关心符号,有一个 Math.Abs)?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)