【问题标题】:std::remquo purpose and usage?std::remquo 目的和用法?
【发布时间】:2023-11-12 08:14:01
【问题描述】:
std::remquo 函数的用途是什么?什么时候可以使用它来代替常规的 std::remainder 函数?
【问题讨论】:
标签:
c++
c
c++11
floating-point
c99
【解决方案1】:
假设我正在实现一个正弦函数。实现正弦的典型方法是设计一些多项式 s,使 s(x) 近似于 x 的正弦,但该多项式仅适用于 -π/4
remquo 函数帮助我们使用这些多项式来实现正弦。我们可以使用“r = remquo(x, pi/2, &q)” 并使用 q 来确定 x 在圆的哪个部分。(注意,正弦是周期为 2π 的周期,所以我们只需要知道低的几个商的位。较高的位仅表示 x 已绕圆并重复正弦值。)根据 x 所在的圆的部分,例程将返回 s(r)、-s(r)、c (r),或 -c(r) 表示 x 的正弦。
当然有装饰,但这是基本理念。它仅适用于较小的 x 值,不超过 2π 的几个倍数。这是因为每次 x 加倍时,除数的另一位移动到精确结果的计算中。但是,我们不能将 π/2 精确地传递给 remquo,因为 double 类型的精度是有限的。因此,随着 x 的增长,误差也会增长。
【解决方案2】:
remquo 在出现在 C++ 之前首先出现在 C99 中,以下是 C99 的基本原理:
remquo 函数旨在实现参数缩减,它可以利用商的一些低位。请注意,x 相对于 y 的大小可能非常大,以至于商的精确表示是不切实际的。