xmath.cpp
来自「一个简单的数学库.但是很实用..大家可以下载过去研究一下.」· C++ 代码 · 共 82 行
CPP
82 行
#include "stdafx.h"
#include <cmath>
#include "xmath.h"
float sin_table[361];
float cos_table[361];
//
// 构造正/余弦函数值查找表
//
void BuildSinCosTable()
{
// 从0度到360度
float tmp;
for(int ang=0;ang<=360;++ang)
{
// 转化为弧度
tmp=DEG_TO_RAD(ang);
// 使用C数学函数填充查找表
sin_table[ang]=sin(tmp);
cos_table[ang]=cos(tmp);
}
}
//
// 使用线性插值快速计算sin/cos,传入的参数为角度
//
float FastSin(float ang)
{
ang=fmodf(ang,360);
if(ang<0)
ang+=360;
int alpha=(int)ang;
float beta=ang-alpha;
return (sin_table[alpha]+beta*(sin_table[alpha+1]-sin_table[alpha]));
}
float FastCos(float ang)
{
ang=fmodf(ang,360);
if(ang<0)
ang+=360;
int alpha=(int)ang;
float beta=ang-alpha;
return (cos_table[alpha]+beta*(cos_table[alpha+1]-cos_table[alpha]));
}
//
// 快速计算x的平方根的倒数,相对误差约为0.177585%
//
float InvSqrt (float x)
{
float xhalf=0.5f*x;
int i=*(int*)&x;
i=0x5f37642f-(i>>1); // 估计初值
x=*(float*)&i;
x=x*(1.5f-xhalf*x*x); // NR过程
return x;
}
//
// 快速计算x的平方根,相对误差约为0.177585%
//
float FastSqrt(float x)
{
union{
int intPart;
float floatPart;
} convertor;
union{
int intPart;
float floatPart;
} convertor2;
convertor.floatPart = x;
convertor2.floatPart = x;
convertor.intPart = 0x1FBCF800 + (convertor.intPart >> 1);
convertor2.intPart = 0x5f37642f - (convertor2.intPart >> 1);
return 0.5f*(convertor.floatPart + (x * convertor2.floatPart));
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?