C#等价于matlab中的eps(X)函数

C#等价于matlab中的eps(X)函数,c#,matlab,floating-point,floating-accuracy,C#,Matlab,Floating Point,Floating Accuracy,我试图将一些matlab代码翻译成C#,但遇到了一个问题。这是一个数值算法,matlab根据eps()函数设置公差 matlab文档()说明: d=eps(X)是从abs(X)到与X精度相同的下一个较大量级浮点数的正距离。X可以是双精度或单精度 据我所知,没有一个本地C#函数能做同样的事情。我是一名物理学家,所以浮点运算的复杂性我并不真正了解。有人能给我指出正确的方向吗 tl;dr:如何计算C#中eps(x)的当量 为了完整性,您可以在matlab中自己计算eps,如下所示: x=1; p=0;

我试图将一些matlab代码翻译成C#,但遇到了一个问题。这是一个数值算法,matlab根据
eps()
函数设置公差

matlab文档()说明:

d=eps(X)是从abs(X)到与X精度相同的下一个较大量级浮点数的正距离。X可以是双精度或单精度

据我所知,没有一个本地C#函数能做同样的事情。我是一名物理学家,所以浮点运算的复杂性我并不真正了解。有人能给我指出正确的方向吗


tl;dr:如何计算C#中eps(x)的当量

为了完整性,您可以在matlab中自己计算eps,如下所示:

x=1; p=0; y=1; z=x+y;
while x~=z
   y=y/2; p=p+1; z=x+y; 
end
eps_ = y*2
eps
输出:

eps_ =

  2.2204e-016


ans =

  2.2204e-016

代码来自:科学计算导论,C.F.van Loan

为了完整性,您可以自己在matlab中计算eps,如下所示:

x=1; p=0; y=1; z=x+y;
while x~=z
   y=y/2; p=p+1; z=x+y; 
end
eps_ = y*2
eps
输出:

eps_ =

  2.2204e-016


ans =

  2.2204e-016

代码来自:科学计算导论,C.F.van Loan

它被称为an,这个问题在C#and.之前已经被回答过了。啊哈!如果我知道它叫ULP,我可能已经找到了…谢谢!我很惊讶没有人提到Epsilon。在C#float中,ε为1.401298E-45;double.Epsilon是4.94065645841247E-324(在我的机器上),它叫an,这个问题在C#and.aha之前已经回答过了!如果我知道它叫ULP,我可能已经找到了…谢谢!我很惊讶没有人提到Epsilon。在C#float中,ε为1.401298E-45;double.Epsilon是4.94065645841247E-324(在我的机器上),这对于任何学习浮点的人来说都是一个很好的练习,请注意,这不是其他语言中的eps或ULP在引擎盖下实际计算的方式,也不应该在实际代码中计算:。虽然这对于学习浮点的人来说是一个很好的练习,请注意,这不是在引擎盖下实际计算eps或其他语言中ULP的方式,也不是在实际代码中计算的方式:。