我正在尝试将一些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)的等价物?
答案 0 :(得分:0)
为了完整起见,您可以在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