C remquo:论点简化?

C remquo:论点简化?,c,math,floating-point,numerical,C,Math,Floating Point,Numerical,C99规范中提到了remquo: remquo函数用于实现参数缩减,这可以利用商的一些低阶位。注意,相对于y,x的大小可能太大,因此商的精确表示是不实际的 在这种情况下,什么是“变元缩减”,可以利用商的一些低阶位的例子是什么?变元缩减意味着将周期函数的变元映射到规范周期(例如,(-π,π)或类似的周期).如果使用π/2作为除数,则商的低位足以确定trig函数的右符号/etc 然而,不幸的是,remquo对于实现标准的三角参数缩减是无用的,因为π是无理的;将大参数约化为π的近似值将得到没有有效位的

C99规范中提到了remquo:

remquo函数用于实现参数缩减,这可以利用商的一些低阶位。注意,相对于y,x的大小可能太大,因此商的精确表示是不实际的


在这种情况下,什么是“变元缩减”,可以利用商的一些低阶位的例子是什么?

变元缩减意味着将周期函数的变元映射到规范周期(例如,(-π,π)或类似的周期).如果使用π/2作为除数,则商的低位足以确定trig函数的右符号/etc

然而,不幸的是,
remquo
对于实现标准的三角参数缩减是无用的,因为
π
是无理的;将大参数约化为π的近似值将得到没有有效位的结果,即所有错误


然而,如果您正在编写一个定义为sin(πx)或类似的函数
f(x)
,那么周期现在可以用浮点表示,并且
remquo
可以完全满足您的需要,而直接调用
sin(2*M_PI*x)
将给出没有有效位的结果(即所有错误)当
x
较大时。

似乎必须通过将参数“减少”到较小的范围并使用查找和插值,以数字方式高效地计算超越函数。请参阅论文。为了清楚起见,适当的remquo实现会返回准确的结果(没有错误)给定参数,它被传递。它在减少三角参数方面用途有限的原因是,传递π的值不可能比用双精度表示的值更精确(或者用长双精度表示Remqul)因此,问题在于输入,而不是函数计算。事实上,这不是函数工作方式的缺陷;这是接口中的一个基本限制,使其对标准trig函数无效。