C++代码实现atanx,atan2x,acosx,asinx,sinx,cosx,tanx三角函数、开方函数sqrtND()

一、开平方函数,牛顿迭代法sqrtND()

double sqrtND(double A) //牛顿迭代法
{
double k = A;
while (kk - A > 0.00000001 || k * k - A < -0.00000001)
{
k = (0.5
k + A / 2 / k) ;
}
return k;
}

二、sinx()/cosx()/tanx()

double angle[] = { pi / 4,pi / 8,pi / 16,
pi / 32,pi / 64,pi / 128,
pi / 256,pi / 512,pi / 1024,
pi / 2048,pi / 4096,pi / 8192,pi / 16384 };

double tang[] = { 1,0.4142135623731,0.19891236737966,
0.098491403357164,0.049126849769467,
0.024548622108925,0.012272462379566,
0.0061360001576234,0.0030679712014227,
0.0015339819910887,0.00076699054434309,
0.00038349521577144,0.00019174760083571 };

double sinx(double a) {
while (a < 0)a += 2 * pi;
if (a <= (pi / 16384)) {
return a; //因为a的值太小,sin a 约等于 a
}
else {
//开始 CORDIC 算法
bool negitive = a < 0; // sin(-a) = -sin(a)
double x = 10;
double y = 0;
double theta = 0;
for (int i = 0;i < 13;i++) { //开始迭代
double orix=0, oriy=0;
while (theta < a) { //当前角度小于a
orix = x;
oriy = y;
//坐标旋转
x = orix - tang[i] * oriy;
y = tang[i] * orix + oriy;
theta += angle[i];
}
if (theta == a) {
if (negitive) {
return -(y / sqrtND((xx + y * y)));
}
else {
return (y / sqrtND((x
x + y * y)));
}
}
else {
//旋转的弧度超过了a,退回原来增加的角度,同时进入下一次迭代
theta -= angle[i];
x = orix;
y = oriy;
}
}
if (negitive) {
return -(y / sqrtND((xx + y * y)));
}
else {
return (y / sqrtND((x
x + y * y)));
}
}
}

double cosx(double a)
{
return sinx(pi/2-a);
}

三、atanx()/asinx()/acosx()/atan2x()

/三角函数全部用泰勒展开,其中atanx收敛域为-1~1,需进行转化/
double atanx(double a)
{
/值域[-pi/2,pi/2]/
/泰勒展开在-1~1内是收敛的,超出范围发散,可进行转换1/x,x>1,atan(x)=pi/2-atan(1/x),x<-1,atan(x)=-pi/2-atan(1/x)/
if (a == 1)return pi / 4;
else if (a == -1)return -pi / 4;
if (a<1 && a>-1)
{
double p = 0.000000001, g = 0, t = a, tmp;
int n = 0;
do {
g = g + t / (2 * n + 1);
t = -t * a*a;
n++;
tmp = t / (2 * n + 1);
} while (fabs(tmp) > p);
return g;
}
else if(a<-1)
return -pi_2-atanx(1 / a);
else return pi_2 - atanx(1 / a);

}
double asinx(double a)
{
/值域[-pi/2,pi/2]/
if (a == 0.5)return pi / 6;
else if (a == -0.5)return -pi / 6;

double p = 0.00000001, g = a, t = a, tmp=a;
int n = 1;
do {tmp = tmp* (2*n-1)*(2*n-1) * a*a / (2*n) / (2*n + 1);g = g + tmp;
} while (fabs(tmp) > p);
return g;

}
double acosx(double a)
{
/值域[0,pi]/
return pi_2 - asinx(a);
}
double atan2x(double y, double x)
{
/值域[-pi,pi]/
if (x > 0) return atanx(y / x);
else if (x < 0 && y >= 0)
return atanx(y / x) + pi;
else if (x < 0 && y < 0)
return atanx(y / x) - pi;
else if (x == 0 && y > 0)
return pi_2;
else if (x == 0 && y < 0)
return -pi_2;
else return 0.0;
}

C++代码实现atanx,atan2x,acosx,asinx,sinx,cosx,tanx三角函数、开方函数sqrtND()相关推荐

  1. matplotlib sinx cosx 图像

    from matplotlib import pyplot as plt import numpy as np plt.figure(figsize=(12,6))#生成的图片的大小 x = np.l ...

  2. 写一个用矩阵法求定积分的通用函数,分别求sinx,cosx,exp(x)的定积分

    /*写一个用矩阵法求定积分的通用函数,分别求sinx,cosx,exp(x)的定积分*/#include <stdio.h> #include <math.h> #define ...

  3. 魔兽地图编辑器插件 YDWE 触发器函数转化成jass代码 以及转化为自定义文本后重新转化为触发器函数

    魔兽地图编辑器插件 YDWE 触发器函数(文字)转化成jass代码 以及转化为自定义文本后重新转化为触发器函数

  4. sinx*cosx的数学期望怎么算

    计算数学期望需要使用概率论中的期望公式.对于函数f(x)=sinx * cosx,其期望为: E(f(x)) = ∫_{-π}^{π} f(x)p(x)dx 其中p(x)是x的概率密度函数.如果x是均 ...

  5. JS代码加密时,什么情况下不能使用全局变量、函数名加密?

    JS代码加密时,什么情况下不能使用全局变量.函数名加密? 在进行JavaScript代码混淆加密时,常会用到变量名.函数名混淆加密. 例如以下代码: 使用JShaman进行JS代码混淆加密: 配置中, ...

  6. append函数_高质量python代码:考虑用生成器来改写直接返回列表的函数

    写在前面:内容参照自<Effective Python>,其实你完全可以直接去看书,什么?你不想自己看书,那么你也可以关注我,我会不定期从书中挑出常用到的有效方法分享出来,这样你就可以一边 ...

  7. php代码清除空格注解,PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)

    最近我从thinkphp的'RUNTIME_ALLINONE'借鉴到经验:不怕缓存多,就怕调用乱,索性将所有常用的文件全部合并成一个文件,岂不美哉... 复制代码 代码如下: function str ...

  8. php下载文件代码 数据库,PHP备份数据库生成SQL文件并下载的函数代码

    . 代码如下: /****** 备份数据库结构 ******/ /* 函数名称:table2sql() 函数功能:把表的结构转换成为SQL 函数参数:$table: 要进行提取的表名 返 回 值:返回 ...

  9. android代码获取deviceid,获取安卓系统的设备id用getDeviceId()函数

    来源:网络 | 2012-12-18 | (有12829人读过) 贴段具体例子代码,用来说明,安卓系统下,如何获取设备id的一段小例子供大家参考: 在计算机上,我们习惯用MAC地址来标志一台计算机.在 ...

最新文章

  1. Python高级爬虫开发,高难度JS解密教程,绝地求生模拟登陆!
  2. 初中参观机器人博物馆的作文_2021考研英语二大作文模板整理
  3. 继承与多态——动手又动脑
  4. 灰盒测试—数据库软件
  5. 韶关无线电厂台式计算机,中国芯片30年的历史 它背后有哪些不为人知的故事?...
  6. 巧用Newtonsoft.Json处理重复请求/并发请求?
  7. 软件构造学习笔记-实验2
  8. 小说阅读网站设计HTML,40多个漂亮的网页表单设计实例
  9. APP录获取短信+通讯录网站源码
  10. Python字典常用函数使用详解(内附详细案例)
  11. iis 访问网站需要进行身份验证
  12. 硅谷新传奇Kevin Systrom
  13. python实现五子棋游戏(控制台版)
  14. 双三次插值 python实现_双三次插值Python
  15. 深度学习用于图像/视频增强的损失函数(loss)及评价指标
  16. 服务器系统瘦身,数据瘦身服务
  17. 通过EasyPOI导入excel数据
  18. 已解决:excel求平均值时出现div/0 如何处理
  19. 2021-11-26 ubuntu触摸板和小键盘设置
  20. 泛微E9二次开发资料完整总结版

热门文章

  1. 使用 Windows Virtual PC 创建一个虚拟机
  2. no_data_found的解决方法
  3. HDU1338/卡片游戏/斗地主/拳王争霸
  4. Unity Shader-边缘检测效果(基于颜色,基于深度法线,边缘流光效果,转场效果)
  5. VS2019配置TBB(Intel)并行库
  6. 抓取领域相关论文及摘要(有源码会附上源码)
  7. 怎么将CAD转换为JPG格式?CAD格式转换轻松教你搞定!
  8. ROS Windows 人机交互软件开发探索与总结二(在win10平板使用ROS人机交互软件)
  9. 怎样在线生成gif动图?如何将png转换gif动图?
  10. sql server利用不同语种语言显示报错错误消息的方法示例