各个运行算所需时间(单位:微秒)

[!查表法] 建立一个大数组来存放对应的三角函数值,通过查表来实现三角函数的快速计算 虽然增加了内存占用(用于存储预计算的值),但在频繁计算且精度要求适中的场景下,能显著提高计算速度。

Qmath.h

#ifndef QMATH_H
#define QMATH_H
 
#include <stdint.h>
 
// 角度和弧度转换
 
#define DEG_TO_RAD(x) ((x) * 0.01745329251994329576f)
 
#define RAD_TO_DEG(x) ((x) * 57.2957795130823208768f)
 
  
// 数学常量
 
#define PI          3.14159265358979323846f
 
#define TWO_PI      6.28318530717958647692f
 
#define HALF_PI     1.57079632679489661923f
 
#define QUARTER_PI  0.78539816339744830962f
 
 
// 函数声明
 
float qsin(float x);
 
float qcos(float x);
 
float qtan(float x);
 
float qatan(float x);
 
float qatan2(float y, float x);
 
 
// 工具函数
 
float qwrap_angle_rad(float angle);
 
float qwrap_angle_deg(float angle);
 
#endif

Qmath.c

#include "Qmath.h"
#include <math.h>
 
 
// 查表配置
 
#define TRIG_TABLE_SIZE 1024
 
#define ATAN_TABLE_SIZE 1024
 
#define TRIG_SCALE (TRIG_TABLE_SIZE / TWO_PI)
 
#define ATAN_SCALE (ATAN_TABLE_SIZE / 2.0f)  // atan范围[-1,1]
 
 
// 正弦表 (0 到 2π)
 
static const float sin_table[TRIG_TABLE_SIZE] = {
 
    0.000000f,    0.006136f,    0.012272f,    0.018407f,    0.024541f,    0.030675f,    0.036807f,    0.042938f,
 
    0.049068f,    0.055195f,    0.061321f,    0.067444f,    0.073565f,    0.079682f,    0.085797f,    0.091909f,
 
    0.098017f,    0.104122f,    0.110222f,    0.116319f,    0.122411f,    0.128498f,    0.134581f,    0.140658f,
 
    0.146730f,    0.152797f,    0.158858f,    0.164913f,    0.170962f,    0.177004f,    0.183040f,    0.189069f,
 
    0.195090f,    0.201105f,    0.207111f,    0.213110f,    0.219101f,    0.225084f,    0.231058f,    0.237024f,
 
    0.242980f,    0.248928f,    0.254866f,    0.260794f,    0.266713f,    0.272621f,    0.278520f,    0.284408f,
 
    0.290285f,    0.296151f,    0.302006f,    0.307850f,    0.313682f,    0.319502f,    0.325310f,    0.331106f,
 
    0.336890f,    0.342661f,    0.348419f,    0.354164f,    0.359895f,    0.365613f,    0.371317f,    0.377007f,
 
    0.382683f,    0.388345f,    0.393992f,    0.399624f,    0.405241f,    0.410843f,    0.416430f,    0.422000f,
 
    0.427555f,    0.433094f,    0.438616f,    0.444122f,    0.449611f,    0.455084f,    0.460539f,    0.465977f,
 
    0.471397f,    0.476799f,    0.482184f,    0.487550f,    0.492898f,    0.498228f,    0.503538f,    0.508830f,
 
    0.514103f,    0.519356f,    0.524590f,    0.529804f,    0.534998f,    0.540172f,    0.545325f,    0.550458f,
 
    0.555570f,    0.560662f,    0.565732f,    0.570781f,    0.575808f,    0.580814f,    0.585798f,    0.590760f,
 
    0.595699f,    0.600617f,    0.605511f,    0.610383f,    0.615232f,    0.620057f,    0.624860f,    0.629638f,
 
    0.634393f,    0.639124f,    0.643832f,    0.648514f,    0.653173f,    0.657807f,    0.662416f,    0.667000f,
 
    0.671559f,    0.676093f,    0.680601f,    0.685084f,    0.689541f,    0.693971f,    0.698376f,    0.702755f,
 
    0.707107f,    0.711432f,    0.715731f,    0.720003f,    0.724247f,    0.728464f,    0.732654f,    0.736817f,
 
    0.740951f,    0.745058f,    0.749136f,    0.753187f,    0.757209f,    0.761202f,    0.765167f,    0.769103f,
 
    0.773010f,    0.776888f,    0.780737f,    0.784557f,    0.788346f,    0.792107f,    0.795837f,    0.799537f,
 
    0.803208f,    0.806848f,    0.810457f,    0.814036f,    0.817585f,    0.821103f,    0.824589f,    0.828045f,
 
    0.831470f,    0.834863f,    0.838225f,    0.841555f,    0.844854f,    0.848120f,    0.851355f,    0.854558f,
 
    0.857729f,    0.860867f,    0.863973f,    0.867046f,    0.870087f,    0.873095f,    0.876070f,    0.879012f,
 
    0.881921f,    0.884797f,    0.887640f,    0.890449f,    0.893224f,    0.895966f,    0.898674f,    0.901349f,
 
    0.903989f,    0.906596f,    0.909168f,    0.911706f,    0.914210f,    0.916679f,    0.919114f,    0.921514f,
 
    0.923880f,    0.926210f,    0.928506f,    0.930767f,    0.932993f,    0.935184f,    0.937339f,    0.939459f,
 
    0.941544f,    0.943593f,    0.945607f,    0.947586f,    0.949528f,    0.951435f,    0.953306f,    0.955141f,
 
    0.956940f,    0.958703f,    0.960431f,    0.962121f,    0.963776f,    0.965394f,    0.966976f,    0.968522f,
 
    0.970031f,    0.971504f,    0.972940f,    0.974339f,    0.975702f,    0.977028f,    0.978317f,    0.979570f,
 
    0.980785f,    0.981964f,    0.983105f,    0.984210f,    0.985278f,    0.986308f,    0.987301f,    0.988258f,
 
    0.989177f,    0.990058f,    0.990903f,    0.991710f,    0.992480f,    0.993212f,    0.993907f,    0.994565f,
 
    0.995185f,    0.995767f,    0.996313f,    0.996820f,    0.997290f,    0.997723f,    0.998118f,    0.998476f,
 
    0.998795f,    0.999078f,    0.999322f,    0.999529f,    0.999699f,    0.999831f,    0.999925f,    0.999981f,
 
    1.000000f,    0.999981f,    0.999925f,    0.999831f,    0.999699f,    0.999529f,    0.999322f,    0.999078f,
 
    0.998795f,    0.998476f,    0.998118f,    0.997723f,    0.997290f,    0.996820f,    0.996313f,    0.995767f,
 
    0.995185f,    0.994565f,    0.993907f,    0.993212f,    0.992480f,    0.991710f,    0.990903f,    0.990058f,
 
    0.989177f,    0.988258f,    0.987301f,    0.986308f,    0.985278f,    0.984210f,    0.983105f,    0.981964f,
 
    0.980785f,    0.979570f,    0.978317f,    0.977028f,    0.975702f,    0.974339f,    0.972940f,    0.971504f,
 
    0.970031f,    0.968522f,    0.966976f,    0.965394f,    0.963776f,    0.962121f,    0.960431f,    0.958703f,
 
    0.956940f,    0.955141f,    0.953306f,    0.951435f,    0.949528f,    0.947586f,    0.945607f,    0.943593f,
 
    0.941544f,    0.939459f,    0.937339f,    0.935183f,    0.932993f,    0.930767f,    0.928506f,    0.926210f,
 
    0.923880f,    0.921514f,    0.919114f,    0.916679f,    0.914210f,    0.911706f,    0.909168f,    0.906596f,
 
    0.903989f,    0.901349f,    0.898674f,    0.895966f,    0.893224f,    0.890449f,    0.887640f,    0.884797f,
 
    0.881921f,    0.879012f,    0.876070f,    0.873095f,    0.870087f,    0.867046f,    0.863973f,    0.860867f,
 
    0.857729f,    0.854558f,    0.851355f,    0.848120f,    0.844854f,    0.841555f,    0.838225f,    0.834863f,
 
    0.831470f,    0.828045f,    0.824589f,    0.821102f,    0.817585f,    0.814036f,    0.810457f,    0.806848f,
 
    0.803208f,    0.799537f,    0.795837f,    0.792107f,    0.788346f,    0.784557f,    0.780737f,    0.776888f,
 
    0.773010f,    0.769103f,    0.765167f,    0.761202f,    0.757209f,    0.753187f,    0.749136f,    0.745058f,
 
    0.740951f,    0.736817f,    0.732654f,    0.728464f,    0.724247f,    0.720002f,    0.715731f,    0.711432f,
 
    0.707107f,    0.702755f,    0.698376f,    0.693971f,    0.689541f,    0.685084f,    0.680601f,    0.676093f,
 
    0.671559f,    0.667000f,    0.662416f,    0.657807f,    0.653173f,    0.648514f,    0.643831f,    0.639124f,
 
    0.634393f,    0.629638f,    0.624859f,    0.620057f,    0.615232f,    0.610383f,    0.605511f,    0.600616f,
 
    0.595699f,    0.590760f,    0.585798f,    0.580814f,    0.575808f,    0.570781f,    0.565732f,    0.560661f,
 
    0.555570f,    0.550458f,    0.545325f,    0.540171f,    0.534998f,    0.529804f,    0.524590f,    0.519356f,
 
    0.514103f,    0.508830f,    0.503538f,    0.498228f,    0.492898f,    0.487550f,    0.482184f,    0.476799f,
 
    0.471397f,    0.465976f,    0.460539f,    0.455084f,    0.449611f,    0.444122f,    0.438616f,    0.433094f,
 
    0.427555f,    0.422000f,    0.416429f,    0.410843f,    0.405241f,    0.399624f,    0.393992f,    0.388345f,
 
    0.382683f,    0.377007f,    0.371317f,    0.365613f,    0.359895f,    0.354163f,    0.348419f,    0.342661f,
 
    0.336890f,    0.331106f,    0.325310f,    0.319502f,    0.313682f,    0.307850f,    0.302006f,    0.296151f,
 
    0.290285f,    0.284407f,    0.278520f,    0.272621f,    0.266713f,    0.260794f,    0.254866f,    0.248928f,
 
    0.242980f,    0.237024f,    0.231058f,    0.225084f,    0.219101f,    0.213110f,    0.207111f,    0.201105f,
 
    0.195090f,    0.189069f,    0.183040f,    0.177004f,    0.170962f,    0.164913f,    0.158858f,    0.152797f,
 
    0.146730f,    0.140658f,    0.134581f,    0.128498f,    0.122411f,    0.116319f,    0.110222f,    0.104122f,
 
    0.098017f,    0.091909f,    0.085797f,    0.079682f,    0.073564f,    0.067444f,    0.061321f,    0.055195f,
 
    0.049068f,    0.042938f,    0.036807f,    0.030675f,    0.024541f,    0.018407f,    0.012271f,    0.006136f,
 
    -0.000000f,    -0.006136f,    -0.012272f,    -0.018407f,    -0.024541f,    -0.030675f,    -0.036807f,    -0.042938f,
 
    -0.049068f,    -0.055195f,    -0.061321f,    -0.067444f,    -0.073565f,    -0.079683f,    -0.085797f,    -0.091909f,
 
    -0.098017f,    -0.104122f,    -0.110222f,    -0.116319f,    -0.122411f,    -0.128498f,    -0.134581f,    -0.140658f,
 
    -0.146731f,    -0.152797f,    -0.158858f,    -0.164913f,    -0.170962f,    -0.177004f,    -0.183040f,    -0.189069f,
 
    -0.195090f,    -0.201105f,    -0.207111f,    -0.213110f,    -0.219101f,    -0.225084f,    -0.231058f,    -0.237024f,
 
    -0.242980f,    -0.248928f,    -0.254866f,    -0.260794f,    -0.266713f,    -0.272621f,    -0.278520f,    -0.284408f,
 
    -0.290285f,    -0.296151f,    -0.302006f,    -0.307850f,    -0.313682f,    -0.319502f,    -0.325310f,    -0.331106f,
 
    -0.336890f,    -0.342661f,    -0.348419f,    -0.354164f,    -0.359895f,    -0.365613f,    -0.371317f,    -0.377008f,
 
    -0.382684f,    -0.388345f,    -0.393992f,    -0.399624f,    -0.405241f,    -0.410843f,    -0.416430f,    -0.422000f,
 
    -0.427555f,    -0.433094f,    -0.438616f,    -0.444122f,    -0.449611f,    -0.455084f,    -0.460539f,    -0.465977f,
 
    -0.471397f,    -0.476799f,    -0.482184f,    -0.487550f,    -0.492898f,    -0.498228f,    -0.503538f,    -0.508830f,
 
    -0.514103f,    -0.519356f,    -0.524590f,    -0.529804f,    -0.534998f,    -0.540172f,    -0.545325f,    -0.550458f,
 
    -0.555570f,    -0.560662f,    -0.565732f,    -0.570781f,    -0.575808f,    -0.580814f,    -0.585798f,    -0.590760f,
 
    -0.595699f,    -0.600617f,    -0.605511f,    -0.610383f,    -0.615232f,    -0.620057f,    -0.624860f,    -0.629638f,
 
    -0.634393f,    -0.639125f,    -0.643832f,    -0.648515f,    -0.653173f,    -0.657807f,    -0.662416f,    -0.667000f,
 
    -0.671559f,    -0.676093f,    -0.680601f,    -0.685084f,    -0.689541f,    -0.693972f,    -0.698376f,    -0.702755f,
 
    -0.707107f,    -0.711432f,    -0.715731f,    -0.720003f,    -0.724247f,    -0.728464f,    -0.732654f,    -0.736817f,
 
    -0.740951f,    -0.745058f,    -0.749136f,    -0.753187f,    -0.757209f,    -0.761202f,    -0.765167f,    -0.769103f,
 
    -0.773011f,    -0.776889f,    -0.780737f,    -0.784557f,    -0.788346f,    -0.792107f,    -0.795837f,    -0.799537f,
 
    -0.803208f,    -0.806848f,    -0.810457f,    -0.814036f,    -0.817585f,    -0.821103f,    -0.824589f,    -0.828045f,
 
    -0.831470f,    -0.834863f,    -0.838225f,    -0.841555f,    -0.844854f,    -0.848120f,    -0.851355f,    -0.854558f,
 
    -0.857729f,    -0.860867f,    -0.863973f,    -0.867046f,    -0.870087f,    -0.873095f,    -0.876070f,    -0.879012f,
 
    -0.881921f,    -0.884797f,    -0.887640f,    -0.890449f,    -0.893224f,    -0.895966f,    -0.898674f,    -0.901349f,
 
    -0.903989f,    -0.906596f,    -0.909168f,    -0.911706f,    -0.914210f,    -0.916679f,    -0.919114f,    -0.921514f,
 
    -0.923880f,    -0.926210f,    -0.928506f,    -0.930767f,    -0.932993f,    -0.935184f,    -0.937339f,    -0.939459f,
 
    -0.941544f,    -0.943594f,    -0.945607f,    -0.947586f,    -0.949528f,    -0.951435f,    -0.953306f,    -0.955141f,
 
    -0.956940f,    -0.958704f,    -0.960431f,    -0.962121f,    -0.963776f,    -0.965394f,    -0.966977f,    -0.968522f,
 
    -0.970031f,    -0.971504f,    -0.972940f,    -0.974339f,    -0.975702f,    -0.977028f,    -0.978317f,    -0.979570f,
 
    -0.980785f,    -0.981964f,    -0.983106f,    -0.984210f,    -0.985278f,    -0.986308f,    -0.987301f,    -0.988258f,
 
    -0.989177f,    -0.990058f,    -0.990903f,    -0.991710f,    -0.992480f,    -0.993212f,    -0.993907f,    -0.994565f,
 
    -0.995185f,    -0.995767f,    -0.996313f,    -0.996820f,    -0.997290f,    -0.997723f,    -0.998118f,    -0.998476f,
 
    -0.998795f,    -0.999078f,    -0.999322f,    -0.999529f,    -0.999699f,    -0.999831f,    -0.999925f,    -0.999981f,
 
    -1.000000f,    -0.999981f,    -0.999925f,    -0.999831f,    -0.999699f,    -0.999529f,    -0.999322f,    -0.999078f,
 
    -0.998795f,    -0.998476f,    -0.998118f,    -0.997723f,    -0.997290f,    -0.996820f,    -0.996313f,    -0.995767f,
 
    -0.995185f,    -0.994565f,    -0.993907f,    -0.993212f,    -0.992480f,    -0.991710f,    -0.990903f,    -0.990058f,
 
    -0.989177f,    -0.988258f,    -0.987301f,    -0.986308f,    -0.985278f,    -0.984210f,    -0.983105f,    -0.981964f,
 
    -0.980785f,    -0.979570f,    -0.978317f,    -0.977028f,    -0.975702f,    -0.974339f,    -0.972940f,    -0.971504f,
 
    -0.970031f,    -0.968522f,    -0.966976f,    -0.965394f,    -0.963776f,    -0.962121f,    -0.960431f,    -0.958703f,
 
    -0.956940f,    -0.955141f,    -0.953306f,    -0.951435f,    -0.949528f,    -0.947586f,    -0.945607f,    -0.943593f,
 
    -0.941544f,    -0.939459f,    -0.937339f,    -0.935183f,    -0.932993f,    -0.930767f,    -0.928506f,    -0.926210f,
 
    -0.923880f,    -0.921514f,    -0.919114f,    -0.916679f,    -0.914210f,    -0.911706f,    -0.909168f,    -0.906596f,
 
    -0.903989f,    -0.901349f,    -0.898674f,    -0.895966f,    -0.893224f,    -0.890449f,    -0.887640f,    -0.884797f,
 
    -0.881921f,    -0.879012f,    -0.876070f,    -0.873095f,    -0.870087f,    -0.867046f,    -0.863973f,    -0.860867f,
 
    -0.857729f,    -0.854558f,    -0.851355f,    -0.848120f,    -0.844853f,    -0.841555f,    -0.838225f,    -0.834863f,
 
    -0.831470f,    -0.828045f,    -0.824589f,    -0.821102f,    -0.817585f,    -0.814036f,    -0.810457f,    -0.806847f,
 
    -0.803207f,    -0.799537f,    -0.795837f,    -0.792107f,    -0.788346f,    -0.784557f,    -0.780737f,    -0.776888f,
 
    -0.773010f,    -0.769103f,    -0.765167f,    -0.761202f,    -0.757209f,    -0.753187f,    -0.749136f,    -0.745058f,
 
    -0.740951f,    -0.736816f,    -0.732654f,    -0.728464f,    -0.724247f,    -0.720002f,    -0.715731f,    -0.711432f,
 
    -0.707107f,    -0.702755f,    -0.698376f,    -0.693971f,    -0.689540f,    -0.685084f,    -0.680601f,    -0.676093f,
 
    -0.671559f,    -0.667000f,    -0.662416f,    -0.657807f,    -0.653173f,    -0.648514f,    -0.643831f,    -0.639124f,
 
    -0.634393f,    -0.629638f,    -0.624859f,    -0.620057f,    -0.615231f,    -0.610383f,    -0.605511f,    -0.600616f,
 
    -0.595699f,    -0.590760f,    -0.585798f,    -0.580814f,    -0.575808f,    -0.570781f,    -0.565732f,    -0.560661f,
 
    -0.555570f,    -0.550458f,    -0.545325f,    -0.540171f,    -0.534997f,    -0.529804f,    -0.524590f,    -0.519356f,
 
    -0.514103f,    -0.508830f,    -0.503538f,    -0.498228f,    -0.492898f,    -0.487550f,    -0.482184f,    -0.476799f,
 
    -0.471397f,    -0.465976f,    -0.460539f,    -0.455083f,    -0.449611f,    -0.444122f,    -0.438616f,    -0.433094f,
 
    -0.427555f,    -0.422000f,    -0.416429f,    -0.410843f,    -0.405241f,    -0.399624f,    -0.393992f,    -0.388345f,
 
    -0.382683f,    -0.377007f,    -0.371317f,    -0.365613f,    -0.359895f,    -0.354163f,    -0.348419f,    -0.342661f,
 
    -0.336890f,    -0.331106f,    -0.325310f,    -0.319502f,    -0.313682f,    -0.307849f,    -0.302006f,    -0.296151f,
 
    -0.290285f,    -0.284407f,    -0.278520f,    -0.272621f,    -0.266713f,    -0.260794f,    -0.254865f,    -0.248927f,
 
    -0.242980f,    -0.237023f,    -0.231058f,    -0.225084f,    -0.219101f,    -0.213110f,    -0.207111f,    -0.201104f,
 
    -0.195090f,    -0.189068f,    -0.183040f,    -0.177004f,    -0.170962f,    -0.164913f,    -0.158858f,    -0.152797f,
 
    -0.146730f,    -0.140658f,    -0.134581f,    -0.128498f,    -0.122411f,    -0.116318f,    -0.110222f,    -0.104121f,
 
    -0.098017f,    -0.091909f,    -0.085797f,    -0.079682f,    -0.073564f,    -0.067444f,    -0.061321f,    -0.055195f,
 
    -0.049068f,    -0.042938f,    -0.036807f,    -0.030675f,    -0.024541f,    -0.018407f,    -0.012271f,    -0.006136f
 
};
 
// 反正切表 (输入范围 -1 到 1)
 
static const float atan_table[ATAN_TABLE_SIZE] = {
 
    -10002.712891f, -315.388214f, -160.215393f, -107.382576f, -80.751358f, -64.703972f, -53.976089f, -46.299141f,
 
    -40.533371f, -36.043865f, -32.449284f, -29.506037f, -27.051931f, -24.974199f, -23.192522f, -21.647690f,
 
    -20.295496f, -19.101957f, -18.040638f, -17.090776f, -16.235611f, -15.461697f, -14.757915f, -14.115180f,
 
    -13.525826f, -12.983498f, -12.482756f, -12.018967f, -11.588211f, -11.187043f, -10.812537f, -10.462088f,
 
    -10.133468f, -9.824670f, -9.533971f, -9.259808f, -9.000796f, -8.755726f, -8.523480f, -8.303091f,
 
    -8.093653f, -7.894380f, -7.704533f, -7.523468f, -7.350581f, -7.185320f, -7.027200f, -6.875755f,
 
    -6.730577f, -6.591275f, -6.457504f, -6.328931f, -6.205265f, -6.086223f, -5.971545f, -5.861001f,
 
    -5.754363f, -5.651431f, -5.552007f, -5.455920f, -5.362996f, -5.273087f, -5.186043f, -5.101724f,
 
    -5.020010f, -4.940774f, -4.863909f, -4.789304f, -4.716864f, -4.646490f, -4.578099f, -4.511604f,
 
    -4.446923f, -4.383988f, -4.322722f, -4.263064f, -4.204946f, -4.148311f, -4.093099f, -4.039260f,
 
    -3.986740f, -3.935488f, -3.885463f, -3.836615f, -3.788906f, -3.742293f, -3.696741f, -3.652210f,
 
    -3.608669f, -3.566081f, -3.524415f, -3.483643f, -3.443732f, -3.404658f, -3.366390f, -3.328908f,
 
    -3.292183f, -3.256194f, -3.220918f, -3.186331f, -3.152416f, -3.119150f, -3.086517f, -3.054495f,
 
    -3.023069f, -2.992220f, -2.961935f, -2.932195f, -2.902984f, -2.874292f, -2.846100f, -2.818397f,
 
    -2.791169f, -2.764405f, -2.738091f, -2.712216f, -2.686768f, -2.661736f, -2.637111f, -2.612881f,
 
    -2.589037f, -2.565569f, -2.542468f, -2.519725f, -2.497331f, -2.475279f, -2.453558f, -2.432163f,
 
    -2.411084f, -2.390316f, -2.369850f, -2.349680f, -2.329798f, -2.310200f, -2.290878f, -2.271825f,
 
    -2.253037f, -2.234506f, -2.216229f, -2.198198f, -2.180409f, -2.162856f, -2.145536f, -2.128442f,
 
    -2.111570f, -2.094916f, -2.078474f, -2.062241f, -2.046212f, -2.030384f, -2.014751f, -1.999311f,
 
    -1.984059f, -1.968992f, -1.954106f, -1.939398f, -1.924864f, -1.910500f, -1.896304f, -1.882272f,
 
    -1.868402f, -1.854690f, -1.841134f, -1.827730f, -1.814475f, -1.801368f, -1.788404f, -1.775582f,
 
    -1.762899f, -1.750353f, -1.737941f, -1.725660f, -1.713510f, -1.701486f, -1.689587f, -1.677811f,
 
    -1.666156f, -1.654620f, -1.643200f, -1.631895f, -1.620703f, -1.609621f, -1.598648f, -1.587783f,
 
    -1.577023f, -1.566367f, -1.555813f, -1.545359f, -1.535004f, -1.524746f, -1.514584f, -1.504516f,
 
    -1.494540f, -1.484655f, -1.474861f, -1.465154f, -1.455535f, -1.446001f, -1.436551f, -1.427185f,
 
    -1.417900f, -1.408696f, -1.399571f, -1.390524f, -1.381554f, -1.372660f, -1.363840f, -1.355094f,
 
    -1.346421f, -1.337819f, -1.329287f, -1.320825f, -1.312431f, -1.304104f, -1.295844f, -1.287649f,
 
    -1.279519f, -1.271453f, -1.263449f, -1.255507f, -1.247626f, -1.239806f, -1.232044f, -1.224342f,
 
    -1.216696f, -1.209108f, -1.201576f, -1.194099f, -1.186677f, -1.179309f, -1.171994f, -1.164731f,
 
    -1.157521f, -1.150361f, -1.143252f, -1.136192f, -1.129182f, -1.122219f, -1.115305f, -1.108438f,
 
    -1.101618f, -1.094843f, -1.088114f, -1.081430f, -1.074790f, -1.068194f, -1.061641f, -1.055130f,
 
    -1.048662f, -1.042235f, -1.035849f, -1.029503f, -1.023198f, -1.016932f, -1.010705f, -1.004516f,
 
    -0.998366f, -0.992253f, -0.986178f, -0.980139f, -0.974136f, -0.968169f, -0.962237f, -0.956341f,
 
    -0.950479f, -0.944651f, -0.938857f, -0.933096f, -0.927368f, -0.921672f, -0.916009f, -0.910377f,
 
    -0.904777f, -0.899208f, -0.893670f, -0.888162f, -0.882684f, -0.877235f, -0.871816f, -0.866425f,
 
    -0.861064f, -0.855730f, -0.850425f, -0.845147f, -0.839896f, -0.834673f, -0.829476f, -0.824306f,
 
    -0.819161f, -0.814043f, -0.808950f, -0.803882f, -0.798840f, -0.793821f, -0.788828f, -0.783858f,
 
    -0.778913f, -0.773991f, -0.769092f, -0.764216f, -0.759363f, -0.754533f, -0.749725f, -0.744940f,
 
    -0.740176f, -0.735433f, -0.730712f, -0.726012f, -0.721333f, -0.716675f, -0.712037f, -0.707420f,
 
    -0.702822f, -0.698245f, -0.693686f, -0.689148f, -0.684628f, -0.680127f, -0.675646f, -0.671182f,
 
    -0.666737f, -0.662311f, -0.657902f, -0.653511f, -0.649137f, -0.644781f, -0.640442f, -0.636120f,
 
    -0.631816f, -0.627527f, -0.623256f, -0.619000f, -0.614761f, -0.610537f, -0.606330f, -0.602138f,
 
    -0.597962f, -0.593800f, -0.589654f, -0.585523f, -0.581407f, -0.577306f, -0.573219f, -0.569146f,
 
    -0.565088f, -0.561044f, -0.557013f, -0.552996f, -0.548993f, -0.545004f, -0.541028f, -0.537065f,
 
    -0.533115f, -0.529178f, -0.525253f, -0.521342f, -0.517442f, -0.513556f, -0.509681f, -0.505819f,
 
    -0.501968f, -0.498130f, -0.494303f, -0.490487f, -0.486684f, -0.482891f, -0.479110f, -0.475340f,
 
    -0.471581f, -0.467832f, -0.464095f, -0.460368f, -0.456652f, -0.452946f, -0.449250f, -0.445565f,
 
    -0.441889f, -0.438224f, -0.434568f, -0.430923f, -0.427286f, -0.423660f, -0.420042f, -0.416435f,
 
    -0.412836f, -0.409246f, -0.405666f, -0.402094f, -0.398531f, -0.394977f, -0.391431f, -0.387894f,
 
    -0.384366f, -0.380846f, -0.377333f, -0.373830f, -0.370334f, -0.366846f, -0.363366f, -0.359893f,
 
    -0.356429f, -0.352971f, -0.349522f, -0.346080f, -0.342645f, -0.339217f, -0.335796f, -0.332383f,
 
    -0.328976f, -0.325577f, -0.322184f, -0.318798f, -0.315418f, -0.312045f, -0.308679f, -0.305318f,
 
    -0.301964f, -0.298617f, -0.295275f, -0.291940f, -0.288610f, -0.285287f, -0.281969f, -0.278657f,
 
    -0.275350f, -0.272050f, -0.268754f, -0.265464f, -0.262180f, -0.258901f, -0.255627f, -0.252358f,
 
    -0.249094f, -0.245835f, -0.242581f, -0.239332f, -0.236088f, -0.232848f, -0.229613f, -0.226383f,
 
    -0.223157f, -0.219936f, -0.216719f, -0.213506f, -0.210297f, -0.207093f, -0.203892f, -0.200696f,
 
    -0.197503f, -0.194315f, -0.191130f, -0.187949f, -0.184771f, -0.181597f, -0.178427f, -0.175260f,
 
    -0.172097f, -0.168937f, -0.165780f, -0.162627f, -0.159476f, -0.156329f, -0.153184f, -0.150043f,
 
    -0.146905f, -0.143769f, -0.140636f, -0.137506f, -0.134378f, -0.131254f, -0.128131f, -0.125011f,
 
    -0.121894f, -0.118778f, -0.115665f, -0.112555f, -0.109446f, -0.106340f, -0.103235f, -0.100133f,
 
    -0.097032f, -0.093933f, -0.090836f, -0.087741f, -0.084647f, -0.081555f, -0.078465f, -0.075376f,
 
    -0.072289f, -0.069202f, -0.066118f, -0.063034f, -0.059952f, -0.056870f, -0.053790f, -0.050711f,
 
    -0.047633f, -0.044556f, -0.041479f, -0.038403f, -0.035328f, -0.032254f, -0.029181f, -0.026107f,
 
    -0.023035f, -0.019963f, -0.016891f, -0.013819f, -0.010748f, -0.007677f, -0.004606f, -0.001535f,
 
    0.001535f, 0.004606f, 0.007677f, 0.010748f, 0.013819f, 0.016891f, 0.019963f, 0.023035f,
 
    0.026107f, 0.029181f, 0.032254f, 0.035328f, 0.038403f, 0.041479f, 0.044556f, 0.047633f,
 
    0.050711f, 0.053790f, 0.056870f, 0.059952f, 0.063034f, 0.066118f, 0.069202f, 0.072289f,
 
    0.075376f, 0.078465f, 0.081555f, 0.084647f, 0.087741f, 0.090836f, 0.093933f, 0.097032f,
 
    0.100133f, 0.103235f, 0.106340f, 0.109446f, 0.112555f, 0.115665f, 0.118778f, 0.121894f,
 
    0.125011f, 0.128131f, 0.131254f, 0.134378f, 0.137506f, 0.140636f, 0.143769f, 0.146905f,
 
    0.150043f, 0.153184f, 0.156329f, 0.159476f, 0.162627f, 0.165780f, 0.168937f, 0.172097f,
 
    0.175260f, 0.178427f, 0.181597f, 0.184771f, 0.187949f, 0.191130f, 0.194315f, 0.197503f,
 
    0.200696f, 0.203892f, 0.207093f, 0.210297f, 0.213506f, 0.216719f, 0.219936f, 0.223157f,
 
    0.226383f, 0.229613f, 0.232848f, 0.236088f, 0.239332f, 0.242581f, 0.245835f, 0.249094f,
 
    0.252358f, 0.255627f, 0.258901f, 0.262180f, 0.265464f, 0.268754f, 0.272050f, 0.275350f,
 
    0.278657f, 0.281969f, 0.285287f, 0.288610f, 0.291940f, 0.295275f, 0.298617f, 0.301964f,
 
    0.305318f, 0.308679f, 0.312045f, 0.315418f, 0.318798f, 0.322184f, 0.325577f, 0.328976f,
 
    0.332383f, 0.335796f, 0.339217f, 0.342645f, 0.346080f, 0.349522f, 0.352971f, 0.356429f,
 
    0.359893f, 0.363366f, 0.366846f, 0.370334f, 0.373830f, 0.377333f, 0.380846f, 0.384366f,
 
    0.387894f, 0.391431f, 0.394977f, 0.398531f, 0.402094f, 0.405666f, 0.409246f, 0.412836f,
 
    0.416435f, 0.420042f, 0.423660f, 0.427286f, 0.430923f, 0.434568f, 0.438224f, 0.441889f,
 
    0.445565f, 0.449250f, 0.452946f, 0.456652f, 0.460368f, 0.464095f, 0.467832f, 0.471581f,
 
    0.475340f, 0.479110f, 0.482891f, 0.486684f, 0.490487f, 0.494303f, 0.498130f, 0.501968f,
 
    0.505819f, 0.509681f, 0.513556f, 0.517442f, 0.521342f, 0.525253f, 0.529178f, 0.533115f,
 
    0.537065f, 0.541028f, 0.545004f, 0.548993f, 0.552996f, 0.557013f, 0.561044f, 0.565088f,
 
    0.569146f, 0.573219f, 0.577306f, 0.581407f, 0.585523f, 0.589654f, 0.593800f, 0.597962f,
 
    0.602138f, 0.606330f, 0.610537f, 0.614761f, 0.619000f, 0.623256f, 0.627527f, 0.631816f,
 
    0.636120f, 0.640442f, 0.644781f, 0.649137f, 0.653511f, 0.657902f, 0.662311f, 0.666737f,
 
    0.671182f, 0.675646f, 0.680127f, 0.684628f, 0.689148f, 0.693686f, 0.698245f, 0.702822f,
 
    0.707420f, 0.712037f, 0.716675f, 0.721333f, 0.726012f, 0.730712f, 0.735433f, 0.740176f,
 
    0.744940f, 0.749725f, 0.754533f, 0.759363f, 0.764216f, 0.769092f, 0.773991f, 0.778913f,
 
    0.783858f, 0.788828f, 0.793821f, 0.798840f, 0.803882f, 0.808950f, 0.814043f, 0.819161f,
 
    0.824306f, 0.829476f, 0.834673f, 0.839896f, 0.845147f, 0.850425f, 0.855730f, 0.861064f,
 
    0.866425f, 0.871816f, 0.877235f, 0.882684f, 0.888162f, 0.893670f, 0.899208f, 0.904777f,
 
    0.910377f, 0.916009f, 0.921672f, 0.927368f, 0.933096f, 0.938857f, 0.944651f, 0.950479f,
 
    0.956341f, 0.962237f, 0.968169f, 0.974136f, 0.980139f, 0.986178f, 0.992253f, 0.998366f,
 
    1.004516f, 1.010705f, 1.016932f, 1.023198f, 1.029503f, 1.035849f, 1.042235f, 1.048662f,
 
    1.055130f, 1.061641f, 1.068194f, 1.074790f, 1.081430f, 1.088114f, 1.094843f, 1.101618f,
 
    1.108438f, 1.115305f, 1.122219f, 1.129182f, 1.136192f, 1.143252f, 1.150361f, 1.157521f,
 
    1.164731f, 1.171994f, 1.179309f, 1.186677f, 1.194099f, 1.201576f, 1.209108f, 1.216696f,
 
    1.224342f, 1.232044f, 1.239806f, 1.247626f, 1.255507f, 1.263449f, 1.271453f, 1.279519f,
 
    1.287649f, 1.295844f, 1.304104f, 1.312431f, 1.320825f, 1.329287f, 1.337819f, 1.346421f,
 
    1.355094f, 1.363840f, 1.372660f, 1.381554f, 1.390524f, 1.399571f, 1.408696f, 1.417900f,
 
    1.427185f, 1.436551f, 1.446001f, 1.455535f, 1.465154f, 1.474861f, 1.484655f, 1.494540f,
 
    1.504516f, 1.514584f, 1.524746f, 1.535004f, 1.545359f, 1.555813f, 1.566367f, 1.577023f,
 
    1.587783f, 1.598648f, 1.609621f, 1.620703f, 1.631895f, 1.643200f, 1.654620f, 1.666156f,
 
    1.677811f, 1.689587f, 1.701486f, 1.713510f, 1.725660f, 1.737941f, 1.750353f, 1.762899f,
 
    1.775582f, 1.788404f, 1.801368f, 1.814475f, 1.827730f, 1.841134f, 1.854690f, 1.868402f,
 
    1.882272f, 1.896304f, 1.910500f, 1.924864f, 1.939398f, 1.954106f, 1.968992f, 1.984059f,
 
    1.999311f, 2.014751f, 2.030384f, 2.046212f, 2.062241f, 2.078474f, 2.094916f, 2.111570f,
 
    2.128442f, 2.145536f, 2.162856f, 2.180409f, 2.198198f, 2.216229f, 2.234506f, 2.253037f,
 
    2.271825f, 2.290878f, 2.310200f, 2.329798f, 2.349680f, 2.369850f, 2.390316f, 2.411084f,
 
    2.432163f, 2.453558f, 2.475279f, 2.497331f, 2.519725f, 2.542468f, 2.565569f, 2.589037f,
 
    2.612881f, 2.637111f, 2.661736f, 2.686768f, 2.712216f, 2.738091f, 2.764405f, 2.791169f,
 
    2.818397f, 2.846100f, 2.874292f, 2.902984f, 2.932195f, 2.961935f, 2.992220f, 3.023069f,
 
    3.054495f, 3.086517f, 3.119150f, 3.152416f, 3.186331f, 3.220918f, 3.256194f, 3.292183f,
 
    3.328908f, 3.366390f, 3.404658f, 3.443732f, 3.483643f, 3.524415f, 3.566081f, 3.608669f,
 
    3.652210f, 3.696741f, 3.742293f, 3.788906f, 3.836615f, 3.885463f, 3.935488f, 3.986740f,
 
    4.039260f, 4.093099f, 4.148311f, 4.204946f, 4.263064f, 4.322722f, 4.383988f, 4.446923f,
 
    4.511604f, 4.578099f, 4.646490f, 4.716864f, 4.789304f, 4.863909f, 4.940774f, 5.020010f,
 
    5.101724f, 5.186043f, 5.273087f, 5.362996f, 5.455920f, 5.552007f, 5.651431f, 5.754363f,
 
    5.861001f, 5.971545f, 6.086223f, 6.205265f, 6.328931f, 6.457504f, 6.591275f, 6.730577f,
 
    6.875755f, 7.027200f, 7.185320f, 7.350581f, 7.523468f, 7.704533f, 7.894380f, 8.093653f,
 
    8.303091f, 8.523480f, 8.755726f, 9.000796f, 9.259808f, 9.533971f, 9.824670f, 10.133468f,
 
    10.462088f, 10.812537f, 11.187043f, 11.588211f, 12.018967f, 12.482756f, 12.983498f, 13.525826f,
 
    14.115180f, 14.757915f, 15.461697f, 16.235611f, 17.090776f, 18.040638f, 19.101957f, 20.295496f,
 
    21.647690f, 23.192522f, 24.974199f, 27.051931f, 29.506037f, 32.449284f, 36.043865f, 40.533371f,
 
    46.299141f, 53.976089f, 64.703972f, 80.751358f, 107.382576f, 160.215393f, 315.388214f, 10002.712891f
 
};
 
  
  
 
// 包装角度到 [0, 2π]
 
float qwrap_angle_rad(float angle) {
 
    angle = fmodf(angle, TWO_PI);
 
    if (angle < 0) angle += TWO_PI;
 
    return angle;
 
}
 
  
 
float qwrap_angle_deg(float angle) {
 
    angle = fmodf(angle, 360.0f);
 
    if (angle < 0) angle += 360.0f;
 
    return angle;
 
}
 
  
 
// 快速正弦计算
 
float qsin(float x) {
 
    // 将角度包装到 [0, 2π]
 
    x = qwrap_angle_rad(x);
 
    // 计算查表索引
 
    float index_f = x * TRIG_SCALE;
 
    int index = (int)index_f;
 
    float frac = index_f - index;
 
    // 边界检查
 
    if (index >= TRIG_TABLE_SIZE - 1) {
 
        index = 0;
 
        frac = 0;
 
    }
 
    // 线性插值
 
    return sin_table[index] * (1 - frac) + sin_table[index + 1] * frac;
 
}
 
  
 
// 快速余弦计算 (利用 cos(x) = sin(x + π/2))
 
float qcos(float x) {
 
    return qsin(x + HALF_PI);
 
}
 
  
 
// 快速正切计算
 
float qtan(float x) {
 
    float sin_val = qsin(x);
 
    float cos_val = qcos(x);
 
    // 避免除零错误
 
    if (fabsf(cos_val) < 1e-6f) {
 
        return (sin_val > 0) ? 1e6f : -1e6f;  // 返回一个大数表示无穷
 
    }
 
    return sin_val / cos_val;
 
}
 
  
 
// 快速反正切计算 (输入范围不受限制)
 
float qatan(float x) {
 
    // 处理特殊情况
 
    if (x == 0.0f) return 0.0f;
 
    if (isinf(x)) return (x > 0) ? HALF_PI : -HALF_PI;
 
    // 利用 atan(x) = -atan(-x) 处理负数
 
    int sign = 1;
 
    if (x < 0) {
 
        x = -x;
 
        sign = -1;
 
    }
 
    // 对于大数值,使用恒等式 atan(x) = π/2 - atan(1/x)
 
    if (x > 1.0f) {
 
        x = 1.0f / x;
 
        float result = HALF_PI - qatan(x);
 
        return sign * result;
 
    }
 
    // 查表计算
 
    float index_f = x * (ATAN_TABLE_SIZE/2);
 
    int index = (int)index_f;
 
    float frac = index_f - index;
 
    if (index >= ATAN_TABLE_SIZE/2 - 1) {
 
        index = ATAN_TABLE_SIZE/2 - 2;
 
        frac = 1.0f;
 
    }
 
    // 线性插值
 
    float result = atan_table[index + ATAN_TABLE_SIZE/2] * (1 - frac) +
 
                   atan_table[index + 1 + ATAN_TABLE_SIZE/2] * frac;
 
    return sign * result;
 
}
 
  
 
// 快速 atan2 计算
 
float qatan2(float y, float x) {
 
    if (x == 0.0f) {
 
        if (y == 0.0f) return 0.0f;  // 未定义,通常返回0
 
        return (y > 0) ? HALF_PI : -HALF_PI;
 
    }
 
    if (y == 0.0f) {
 
        return (x > 0) ? 0.0f : PI;
 
    }
 
    float ratio = y / x;
 
    float angle = qatan(ratio);
 
    // 根据象限调整角度
 
    if (x < 0) {
 
        if (y >= 0) {
 
            angle += PI;
 
        } else {
 
            angle -= PI;
 
        }
 
    }
 
    return angle;
 
}