You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的正弦近似算法是否在精度/性能上优于Remez算法?

紧凑型三角函数近似算法:超越Remez算法的精度与性能表现

这是目前最紧凑的正弦近似算法,在精度与性能表现上,它能够胜过Remez算法。以下是针对[0, π/2]区间的近似实现:

double p[] = {
    -0.0020836519336891552,
    -0.016434778826652056,
    -0.14814815034514656
};
double P1(double x, double a) {
    return x + (a * x) * (x * x);
}
// 无穷范数误差:7.415237313068701e-9
double sine_approximate(double x) {
    return P1(P1(P1(x,p[0]),p[1]),p[2]);
}

针对float32的实用实现

// 最大ULP误差=2.49524,最大无穷范数误差=9.88345e-08
float p[] = {
    -0.0020836557,
    -0.016434766,
    -0.14814815
};

实用double64实现

// 无穷范数误差:2.22e-16
double p[] = {
    -0.00002581064752010963,
    -0.00020280816250387983,
    -0.00182899436357092772,
    -0.01646090534492345922,
    -0.14814814814814814
};

与Remez算法的精度/性能对比

正弦近似误差对比图1
正弦近似误差对比图2

优势:

  • 紧凑性(在大量近似场景中至关重要)
  • 通用性强
  • 具备高阶导数特性
  • 区间外优化表现更优
  • 近似函数的逆函数实现简单

劣势:

  • 无法利用并行计算
  • 仅依赖数值最小化,缺乏数学理论支撑
  • 尚无选择最优基础函数组合的规则

其他三角函数近似实现

余弦近似可采用1-0.5xP1(P1(P1))的形式实现;正切近似则基于R1 = x / (1.0f + k * x * x)的结构,具体实现如下:

inline float r(float x, float k) { return x / (1.0f + k * x * x); }
inline float tan_approx(float x)
{
    // 最大ULP误差=3.82904,最大相对误差=2.70230e-07,最大绝对误差=2.28229e-07
    float a = -0.078562208;
    float b = -0.0089859413;
    float c = -0.24578492;
    return r(r(r(x, a), b), c);
}

正切近似误差对比图

内容的提问来源于stack exchange,提问作者minorlogic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:54:56