标签: elementary-functions

当另一个公式似乎更有意义时,为什么基于表格的sin近似文献总是使用这个公式?

关于sin用表格计算基本函数的文献参考公式:

sin(x) = sin(Cn) * cos(h) + cos(Cn) * sin(h)
Run Code Online (Sandbox Code Playgroud)

其中x = Cn + h,Cn是针对其恒定sin(Cn)cos(Cn)已被预先计算并在表中可用的,并且,如果以下半乳糖的方法,Cn已被选择为使得两个sin(Cn)cos(Cn)密切由浮点数近似.数量h接近0.0.此公式的参考示例是本文(第7页).

我不明白为什么这是有道理的:cos(h)然而,它被计算,对于某些值,至少0.5 ULP可能是错误的h,并且因为它接近1.0,这似乎对结果的准确性有极大的影响.sin(x)以这种方式计算.

我不明白为什么不使用下面的公式:

sin(x) = sin(Cn) + (sin(Cn) * (cos(h) - 1.0) + cos(Cn) * sin(h))
Run Code Online (Sandbox Code Playgroud)

然后两个量(cos(h) - 1.0),并sin(h)可以用,很容易做出准确的,因为它们产生接近零的结果多项式来近似.为价值观sin(Cn) * (cos(h) - 1.0), cos(Cn) * sin(h)并为他们的总和仍然很小,其绝对精度,该总和表示,因此,加入这个量的少量ULPS表达sin(Cn)几乎是正确舍入. …

floating-point ieee-754 elementary-functions

15
推荐指数
2
解决办法
765
查看次数

如何以度为单位计算正确的三角函数?

我如何定义以度为单位而不是通常的弧度的参数的三角函数,并为这些参数计算正确的舍入结果?

在将参数M_PI/180.0传递给弧度中的相应函数之前将参数乘以不起作用,因为M_PI/180.0它不是π/ 180."浮点运算手册"第5.5节提供了一种方法来计算参数的正确舍入乘积π/ 180,但是一些参数仍然是这样的,即该乘积接近两个连续可表示浮点数之间的中点,然后在弧度中应用甚至正确舍入的函数可能会产生错误的最终结果.

其可以单独或组合工作的两种策略是使用较高的精度和使用sinpi,cospi,tanpi从三角函数CRlibm,分别计算sin(?x),cos(?x)tan(?x).

对于后一种策略,存在180分割的问题,这对许多论点来说并不完全正确.

关于更高精度的策略(将参数乘以π/ 180的扩展精度表示,然后应用弧度的扩展精度函数),"精确"情况可能仍然存在问题.指出的唯一合理结果的定理sin,costan一个合理的说法中得到0仅适用于弧度版本.它显然不适用于度数版本,如果对于某些浮点输入x,sindeg(x)恰好是两个连续可表示的浮点数之间的中点,那么没有多少中间精度足以保证最终结果是正确舍入的.

floating-point trigonometry degrees elementary-functions

7
推荐指数
1
解决办法
1106
查看次数

Matlab的perms函数中的表观错误

 p = perms([0:2])
Run Code Online (Sandbox Code Playgroud)

p =

 2     1     0
 2     0     1
 1     2     0
 1     0     2
 0     1     2
 0     2     1
Run Code Online (Sandbox Code Playgroud)

该函数应该以反向字典顺序显示向量的排列.因此,我希望此输出的最后一行包含元素0 1 2; 但是,它包含0 2 1.其他行正确显示.

简而言之,最后两行的顺序是互换的.这里发生了什么?

math matlab permutation discrete-mathematics elementary-functions

7
推荐指数
1
解决办法
158
查看次数