为什么用deg2rad转换角度并乘以pi / 180的结果为何不同?

Sam*_*Sam 1 precision matlab rounding degrees radians

我正在使用Matlab函数deg2rad将角度从度转换为弧度(很明显)。我将它们用于角度alphabeta,这些角度又用于插入一些表格数据f(alpha, beta),这些数据是相对于alphabeta的。出于我的目的,我将它们以弧度使用,这样我就必须时不时地来回转换。

现在,我发现-与使用f(pi/180*alpha, pi/180*beta)-相比,每当我使用using f(deg2rad(alpha), deg2rad(beta))进行插值时,插值都在边界处的插值区域之外。即,插值边界位于alpha = [-4, 4]beta = [-3, 3]并且NaN在使用时,沿这些边界进行插值给了我deg2rad。因此,这看起来像是某种舍入或机器精度误差。

现在,作为MWE,假设我要检查deg2rad(-3) == -3*pi/180,这给了我:

>> deg2rad(-3) == -3*pi/180
ans =
  logical
   0
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  1. 当在插值区域的边缘附近操作时,使用deg2rad基本上对我没有用,该如何防止这种行为?
  2. deg2rad除了与相乘以外,该函数有什么作用pi/180

提前致谢。

附言:它比我想象的还要陌生,因为它以不同的角度起作用:

>> deg2rad(2) == 2*pi/180
ans =
  logical
   1
Run Code Online (Sandbox Code Playgroud)

Cri*_*ngo 5

通过键入edit deg2radMATLAB 可以回答您的问题。它计算:

angleInRadians = (pi/180) * angleInDegrees;
Run Code Online (Sandbox Code Playgroud)

当然,您的版本((a*pi)/180)和MATLAB的(a*(pi/180))之间的操作顺序有所不同。此不同顺序导致舍入误差不同。

如果舍入错误导致您的函数出现问题,则您的函数不稳定,需要修复。

  • @Sam参见/sf/ask/41160311/和/sf/ask/48050761/在Matlab中的-24-0000。您需要使用不依赖完全相等的策略。 (2认同)
  • @Sam:这里没有MATLAB函数做错任何事情。舍入误差是浮点运算固有的。请参阅上面由Andras链接的问答。情况是,您有一个对舍入错误没有鲁棒性的函数。您需要使其坚固。如果您需要帮助,请编辑问题以在此处包含您要解决的实际问题。请注意,严格相等比较在某些情况下很有用,但在其他情况下则无用。作为浮点算法的用户,您必须了解其局限性。 (2认同)