资源简介
三角函数包括反三角函数的实现,基本思想是利用泰勒级数。鉴于反三角函数ACOS在0.9-1的时候利用直接利用泰勒级数时收敛很慢的缺点,比较ulicx作了优化,使得精度和时间都达到了自己预期。适用于在嵌入式环境下不好实用math库的项目
代码片段和文件信息
// CalDis.cpp : Defines the entry point for the console application.
//
#include “stdio.h“
#include “stdlib.h“
#include “time.h“
#include “math.h“
#define PI 3.14159265358979323846
#define COEFF 6370693.4856530580439461631130889
//角度转弧度
double deg2rad(double deg)
{
return (deg*PI)/180.0;
}
double rad2deg(double rad)
{
return rad*180/PI;
}
double fabs(double x)
{
if (x < 0)
return -x;
return x;
}
//牛顿迭代法求开方
double k_sqrt(double adouble x0)
{
double x1y;
x1=(x0+a/x0)/2.0;
if(fabs(x1-x0)>=10e-15)
y = k_sqrt(ax1);
else y=x1;
return y;
}
double sqrt(double x)
{
return k_sqrt(x 1.0);
}
//用于计算距离和方向
double sin(double x)
{
double result=xtemp=x;
double den=xfac=1;
int n=1sign=1;
while((temp>1e-15)||(temp<-1e-15))
{
n++fac*=nden*=x;
n++fac*=nden*=x;
temp=den/fac;sign=-sign;
result=sign>0?result+temp:result-temp;
}
return result;
}
double cos(double x)
{
x=PI / 2 - x;
return sin(x);
}
double pow(double x int n)
{
double result = 1;
if (n == 0)
return 1;
for (int i = 0; i < n; i++)
{
result*=x;
}
return result;
}
long factorial(int x)
{
long result = 1;
for (int i = 1; i <= x; i++)
result *= i;
return result;
}
double asin(double x)
{
double result=0;
double temp=x;
int n=1;
while((temp>1e-15)||(temp<-1e-15))
{
result += temp;
temp = factorial(2*n) / (pow(2 2*n) * pow(factorial(n) 2)) * pow(x 2*n+1) / (2*n+1);
printf(“%lf %d\n“ temp n);
n++;
}
printf(“n=%d\n“n);
return result;
}
double acos(double x)
{
if (fabs(x) < 0.5)
return PI / 2 - asin(x);
else
return 2 * asin(sqrt((1-x)/2));
}
//计算距离
double distance(double lat1double lon1double lat2double lon2)
{
double test=sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(lon1 - lon2));
printf(“test %.lf\n“ test);
return COEFF*acos(test);
}
int main(int argc char* argv[])
{
clock_t start finish;
double duration;
start = clock();
printf(“%lf\n“ sin(deg2rad(0)));
printf(“%lf\n“ cos(deg2rad(60)));
printf(“%.15lf\n“ cos(acos(0.99999988888887)));
printf(“%lf\n“ cos(acos(0.5)));
printf(“%lf\n“ distance(31.589204 118.46524231.589804 118.465242));
printf(“%lf\n“sqrt(2));
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( “%f seconds\n“ duration);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2624 2014-06-29 23:35 CalDis\CalDis.cpp
文件 4544 2014-06-29 23:20 CalDis\CalDis.dsp
文件 518 2014-06-24 14:40 CalDis\CalDis.dsw
文件 50688 2014-06-29 23:38 CalDis\CalDis.opt
文件 1273 2014-06-29 23:35 CalDis\CalDis.plg
文件 192580 2014-06-29 23:35 CalDis\Debug\CalDis.exe
文件 228984 2014-06-29 23:35 CalDis\Debug\CalDis.ilk
文件 13361 2014-06-29 23:35 CalDis\Debug\CalDis.obj
文件 203608 2014-06-25 16:52 CalDis\Debug\CalDis.pch
文件 459776 2014-06-29 23:35 CalDis\Debug\CalDis.pdb
文件 1827 2014-06-25 16:52 CalDis\Debug\StdAfx.obj
文件 41984 2014-06-29 23:35 CalDis\Debug\vc60.idb
文件 53248 2014-06-29 23:35 CalDis\Debug\vc60.pdb
文件 1208 2014-06-24 14:40 CalDis\ReadMe.txt
文件 293 2014-06-24 14:40 CalDis\StdAfx.cpp
文件 769 2014-06-24 14:40 CalDis\StdAfx.h
目录 0 2014-06-29 23:35 CalDis\Debug
目录 0 2014-06-29 23:38 CalDis
文件 50176 2014-06-29 23:38 CalDis\CalDis.ncb
----------- --------- ---------- ----- ----
1307461 19
- 上一篇:后台检测关键字,触发执行操作源码,AU3源码。
- 下一篇:新建文本文档(1).txt
相关资源
- MP3文件ID3v2ID3v2APEv2标签读取
- 课程作业:模拟仓库管理系统
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- 成绩管理系统(数据结构)
- FIR低通滤波器 ccs运行环境
- C malloc函数用法
- 嵌入式局域网聊天系统客户端
- 算法竞赛入门经典 第2版刘汝佳+高清
- 基于单片机的GPS定位及显示系统设计
- 链表实现通讯录管理系统
- PowerShell-6.2.1-win-x86.zip
- pl/0编译器 语法分析
- 源程序阅读与调试课程设计报告--学生
- 谁说程序员不浪漫?!基于easyX图形库
- 编译原理课设c编译器
- MCP3421 STM32 Driver
- ADS1100 STM32 Driver
- 单片机89c52与MLX90614红外的测温程序
- stm32f103AES加密 cbc模式
- 单片机 点阵 字模提取软件
- C高级编程讲义-传智播客
- NOIP必学内容之前缀和与差分颜鸿宇
- Skyline高效检索算法实现.zip
- STM8S103系列IO模拟串口通信实现真正串
- stm32f103c8t6移植uC/OS-III基于HAL库的工程
- 温度、一氧化碳、二氧化碳、PM2.5以及
- 王道论坛计算机考研机试指南
- 有限元中网格剖分算法
- PLC开源资料
评论
共有 条评论