C#等价于matlab中的eps(X)函数
我试图将一些matlab代码翻译成C#,但遇到了一个问题。这是一个数值算法,matlab根据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;
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的方式,也不是在实际代码中计算的方式:。