c语言表示反正弦函数,[原创]正弦和反正弦函数
[原创]正弦和反正弦函数
记得曾经有人提出过这个问题——如何模拟正弦函数。
我试着编了一个正弦和反正弦的函数。
算法:二分搜索,有些像搜索算法里的二分法,算试一种推广吧,我在单位圆里面对单位圆上的 坐标进行二分搜索,直到找到匹配的坐标为止;
——经过测试,和标准数学函数的正弦函数误差 几乎为0,
由于水平有限,让大家见笑了。
下面贴出代码(有注释,如果不懂,请提出来):
/*正弦和反正弦函数*/
/*为了和标准数学函数区别,正弦函数为sinof()反正弦函数为arcsin()*/
#include
typedef struct num{double x;double y;}num;
num *midof(num *a,num *b) /*求角平分线于单位圆的交点*/
{double x1,y1,z; num *mid=(num*)malloc(sizeof(num));
x1=(a->x+b->x)/2;
y1=(a->y+b->y)/2;
z=sqrt(100000000/(x1*x1+y1*y1));
mid->x=z*x1;
mid->y=z*y1;
return mid;}
double doarcsin(double n) /*搜索函数,可以搜索0-1*/
{num *a=(num*)malloc(sizeof(num)); /*a为上界,b为下界,mid为中间坐标*/
num *b=(num*)malloc(sizeof(num));
num *mid=(num*)malloc(sizeof(num));
double f,t,answer,s,i=45;
a->x=0;a->y=10000;
answer=90; /*尽量让坐标数值大,充分利用double的整数位,保证精确搜索*/
b->x=10000;b->y=0;
t=10000*n;f=sqrt(100000000-t*t);
mid=midof(a,b);
s=(mid->x-f)*(mid->x-f)+(mid->y-t)*(mid->y-t);
/*当sin 值达于0.6时以横坐标为判断*/
if(n>=0.6){while(s>=0.0000000001)
{
if(mid->x>f){b->x=mid->x;b->y=mid->y;i=i/2;}
if(mid->x<=f){a->x=mid->x;a->y=mid->y;answer=answer-i;i=i/2;}
mid=midof(a,b);
s=sqrt((mid->x-f)*(mid->x-f)+(mid->y-t)*(mid->y-t)); } }
else {while(s>=0.0000000001)
{ /*以纵坐标判断*/
if(mid->yx=mid->x;b->y=mid->y;i=i/2;}
if(mid->y>=t){a->x=mid->x;a->y=mid->y;answer=answer-i;i=i/2;}
mid=midof(a,b);
s=sqrt((mid->x-f)*(mid->x-f)+(mid->y-t)*(mid->y-t)); }}
free(a);
free(b);
free(mid);
return answer; }
double arcsin(double n) /*反正弦函数,把所有情况化为0-1的情况然后求解*/
{if(n>1||n
else if(n>=0)return (doarcsin(n));
else return (-1*doarcsin((-1*n))) ;}
double dosinof(double n) /*正弦搜索函数,计算0-90度的正弦值*/
{num *a=(num*)malloc(sizeof(num)); /*a为上界,b为下界,mid为中间坐标*/
num *b=(num*)malloc(sizeof(num));
num *mid=(num*)malloc(sizeof(num));
double answer,s,now=45000000,i=45000000; /*把角度扩大了1000000倍,充分利用double的整数位置,也是搜索准确的关键所在*/
n=n*1000000;
a->x=0;a->y=10000;
answer=90;
b->x=10000;b->y=0;
mid=midof(a,b);
s=abs(i-n);
i=(i/2);
while(s>=0.0000000001)
{
if(now>n){a->x=mid->x;a->y=mid->y;now=now-i;i=(i/2); }
else if(now<=n){b->x=mid->x;b->y=mid->y;now=now+i;i=(i/2);}
mid=midof(a,b);
s=abs(now-n); }
answer=mid->y/10000;
free(a);
free(b);
free(mid);
return answer;}
double sinof(double n) /*正弦函数,把所有情况化归到0-90度然后解决*/
{while(n>180||n
{if(n>180)n=n-360;
if(n
if(n>90)n=180-n;
if(n
if(n>=0)return dosinof(n);
else return (-1*dosinof((-1)*n));}
c语言表示反正弦函数,[原创]正弦和反正弦函数相关推荐
- 用matlab计算反正弦函数,为什么正弦,反正弦函数计算结果会出现复数?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 All_1=62.9582, lAdot_radS=(180/186)/180*pi; onedeg = pi/180; RAAN = onedeg:on ...
- c语言中的反余弦和反正弦函数,VB中的反正弦函数与反余弦函数
VB中好像没有反正弦函数与反余弦函数,需要自己动手编写,可以通过VB自带的反正切函数Atn(x)来编写VB的反正弦函数ArcSin(x)与反余弦函数ArcCos(x). VB自带的反正切函数: Atn ...
- 复数正弦波 matlab,为什么正弦,反正弦函数计算结果会出现复数?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 All_1=62.9582, lAdot_radS=(180/186)/180*pi; onedeg = pi/180; RAAN = onedeg:on ...
- c语言 开发交易系统,原创轻松编程(MT4平台智能交易系统图文教程)课件.pptx...
原创轻松编程(MT4平台智能交易系统图文教程)课件 编程入门MT4平台智能交易系统图文教程本PPT采用Office2007编制开始之前请回答我的问题第一个问题 你真的下决心学习编程了吗?第二个问题 你 ...
- 哈夫曼字符串编码c语言实现,基于哈夫曼(haffuman)算法的文件压缩的实现(C语言)(原创)...
本文首先简要阐述哈夫曼算法的基本思想,然后介绍了使用哈夫曼算法进行文件压缩和解压缩的 处理步骤,最后给出了C语言实现的文件压缩和解压缩的源代码. 哈夫曼算法的主要思想是: ①首先遍历要处理的字符串,得 ...
- 有序二叉树c语言,二叉搜索树(BST)的实现(C语言)(原创)
叉搜索树(Binary Search Tree)的一般形式如下图所示,每个节点中的元素大于它的左子树中的所有元素,小于它的右子树中的所有元素.对该图中的二叉树进行中序遍历得到一个从小到大排列的有序序列 ...
- c语言用库函数求正弦数,用C语言求正弦值?
1.C语言中要编写sin函数,实质上要利用sin的泰勒公式,然后根据泰勒公式,将其中的每一项进行分解,最后用循环,累加计算出最终结果. 2.下面用for循环实现sin的算法,程序代码如下: #incl ...
- c语言程序设计mp4,[原创]Nisy编程教学视频C语言/C++语言MP4版
2011年左右录制的视频,现在没有精力去做教学辅导,全部免费分享给大家. 水平有限,难免视频中会出现一些疏漏和错误,欢迎大家批评指正. 学习过程中有问题可以加入我们的球球群24083233,一起交流讨 ...
- 接鸡蛋小游戏【终极版】【C语言】【原创】
还是以前写的没法出来 接鸡蛋当时有写终极版,但是只是放在下载资源中,没发到博客上 /* 头文件 */ # include <windows.h> # include <st ...
- asin c语言中 返回值范围_C语言asin()函数:求正弦值为 x 的弧度数
函数名: asin 头文件: 函数原型: double asin(double x) 功 能: 求正弦值为 x 的弧度数 参数: double x 正弦值.x 的取值必须位于区间[-1, 1]中 ...
最新文章
- 安装mayavi和VTK库的血泪史
- Could not open a connection to your authentication agent
- Android 内存管理 amp;Memory Leak amp; OOM 分析
- g++ 安装python_mac编译安装faiss
- 『转载』|收藏|一张看懂AI知识体系
- ​Transformer升级之路:从Performer到线性Attention
- 【题解】Atcoder ARC#90 F-Number of Digits
- Machine Learning - Coursera week6 Evaluating a learning algorithm
- scratch 素材_scratch书籍免费领
- WebService之Axis2 (3):使用services.xml文件发布WebService
- 【】oracle当前用户下有什么表?
- IOS APP提交流程
- 土方计算软件FastTFT V15.1.0更新说明(支持AutoCAD2020平台)
- 斐波那契堆的java实现
- EDA技术与应用实验二(PowerShell实现)
- 视频教程-HTML5基础视频课程 - 实用的HTML教程-HTML5/CSS
- 如何在计算机管理设置开机密码,电脑怎么设置开机密码 开机密码设置步骤
- 爬虫实战—豆瓣250榜单的爬取
- lua 范例_lua的mqtt实例
- drill apache_Apache Spark与Apache Drill