1

我正在尝试将一些 matlab 代码翻译成 C# 并且遇到了问题。它是一种数值算法,matlab 设置了一个基于eps()函数的容差。

matlab 文档(http://www.mathworks.co.uk/help/matlab/ref/eps.html)说:

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

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

tl; dr:如何在 C# 中计算 eps(x) 的等价物?

4

1 回答 1

1

eps为了完整起见,您可以在 matlab 中按如下方式计算自己:

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

代码来自:科学计算概论,CF van Loan

于 2013-08-13T19:17:34.207 回答