在研究一些MATLAB代码时,我发现了这个(简化版)
is = 1.414 % just any floating point value
tol=1.e-4
s=sign(is); if(s==0), s=1; end;
is=s*abs(is)*tol/eps
但这对我没有意义。与下面的代码有什么区别?
tol=1.e-4
is=is*tol/eps
即使我没有MATLAB,操作看起来也很简单,并且不会有任何混淆。但是,我也确信作者意味着什么。
你知道吗?答案 0 :(得分:2)
让我们创建一个简单的“单元测试”:
>> q47173141
------------------------
3
1351079888211.149
1351079888211.149
------------------------
-2
-900719925474.0992
-900719925474.0992
------------------------
0
0
0
------------------------
1+1i
450359962737.0496+450359962737.0496i
450359962737.0496+450359962737.0496i
------------------------
0+0.2i
0+90071992547.4099i
0+90071992547.4099i
------------------------
0-2i
0-900719925474.0992i
0-900719925474.0992i
哪个输出:
s = sign(is) ... s*abs(is)
因此,第一个结论是代码对于常见场景(在数值误差范围内)是等效的。
至于为什么这样做 - 我只能推测{{1}}是某种方式来处理复杂数字的sign
输出(没有意识到它可以用更简单的方式完成)