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

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