remquo: 参数归约?

6
在C99规范中,remquo函数被用于实现参数约简,可以利用商的一些低位。需要注意的是,x的大小相对于y可能非常大,因此实现商的精确表示并不实际。在这种情况下,“参数约简”是什么意思?并且有没有一个能够利用商的几个低位的例子?

似乎与通过将参数“缩小”到较小范围并使用查找和插值的方法在数值上高效地计算超越函数有关。请参阅这些 两篇论文。 - Kerrek SB
1个回答

7

参数归约指将周期函数的参数映射到规范周期内(例如,(-π,π]或类似)。如果您使用π/2作为除数,则商的低位足以确定三角函数的正确符号/等。

然而,遗憾的是,remquo对于实现标准三角函数参数归约毫无用处,因为π是无理数; 对大参数进行模近似π的缩小将给出没有有效位的结果,即全部错误。

但是,如果您编写了一个定义为sin(πx)的函数f(x)或类似函数,则在浮点数中现在可以准确表示周期,remquo可以完全满足您的需要,而直接调用sin(2*M_PI*x)将在x很大时给出没有有效位的结果(即全部错误)。


2
需要明确的是,正确的remquo实现将在给定参数的情况下返回精确结果(无误差)。它在减少三角函数参数方面的有限用途在于,在double(或remquol中的long double)中表示π的精度比它能够表示的更高。因此,问题出在输入上,而不是函数计算上。 - Eric Postpischil
实际上,这不是函数工作方式中的一个错误;而是接口固有的限制使其对标准三角函数无用。 - R.. GitHub STOP HELPING ICE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接