c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot
c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot
#include <iostream>
#include <cstdlib>
#include <iomanip>
constexpr auto PI = 3.1415926;
int menu_select() {
int select;
std::cout << "-------Welcome to Snow Calculator-------" << std::endl;
std::cout << " 1. sin x " << std::endl;
std::cout << " 2. cos x " << std::endl;
std::cout << " 3. tan x " << std::endl;
std::cout << " 4. cot x " << std::endl;
std::cout << " 5. Clean screen " << std::endl;
std::cout << " 0. to quit " << std::endl;
std::cout << "----------------------------------------" << std::endl;
std::cin >> select;
return select;
}
double inputtrans(void) {
double x;
std::cout << "Please input x: " << std::endl;
std::cin >> x;
while (x >= 360.0)
{
x -= 360.0;
}
return (x * PI / 180.0);
}
double factorial(double n) {
if (n <= 1) {
return n;
}
else {
return n * factorial(n - 1);
}
}
//下面为求绝对值函数
double myabs(double num1)
{
return((num1 > 0) ? num1 : -num1);
}
//下面为求sin(x)的值
double snowsin(double num2)
{
int i = 1, negation = 1;//取反
double sum;
double index = num2;//指数
double Factorial = 1;//阶乘
double TaylorExpansion = num2;//泰勒展开式求和
do
{
Factorial = Factorial * ((__int64)i + 1) * ((__int64)i + 2);//求阶乘
index *= num2 * num2;//求num2的次方
negation = -negation;//每次循环取反
sum = index / Factorial * negation;
TaylorExpansion += sum;
i += 2;
} while (myabs(sum) > 1e-15);
return(TaylorExpansion);
}
double snowcos(double x) {
x = (PI / 2) - x;
return sin(x);
}
double snowtan(double x) {
return (snowsin(x) / snowcos(x));
}
double snowcot(double x) {
return (1 / snowtan(x));
}
int main()
{
double result = 0.0;
double x = 0.0;
int menu = menu_select();
while (menu != 0)
{
switch (menu)
{
case 1:
x = inputtrans();
result = snowsin(x);
std::cout << std::fixed << std::setprecision(5) << "Result = " << result << std::endl;
break;
case 2:
x = inputtrans();
result = snowcos(x);
std::cout << std::fixed << std::setprecision(5) << "Result = " << result << std::endl;
break;
case 3:
x = inputtrans();
result = snowtan(x);
std::cout << std::fixed << std::setprecision(5) << "Result = " << result << std::endl;
break;
case 4:
x = inputtrans();
result = snowcot(x);
std::cout << std::fixed << std::setprecision(5) << "Result = " << result << std::endl;
break;
case 5:
system("cls");
break;
case 0:
break;
default:
std::cout << "Wrong input, please input again!" << std::endl;
break;
}
if (menu == 0) {
break;
}
menu = menu_select();
}
std::cout << "Thank you for using!\nPress any key to exit.\n";
system("pause");
}
c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot的更多相关文章
- 汇编语言计算Sin,Cos,Pow函数
填了一下之前的坑.首先是一个题外话,在VS2015中默认汇编代码会使用SSE生成,如果想用FPU编译出FLD,FSTP这些指令,需要设置一下. 项目 >> 属性 >> C/C+ ...
- Chartjs 简单使用 ------ 制作sin cos 折线图
Chart.js 一款简单干净的图表工具,基于html5 的Javascript. 可以用来制做条形,扇形,折线,混合等等的强大工具 图表要放在html 的 cancas 标签中 <canv ...
- 初中知识回顾tan,sin,cos关系
如果K=tan, sin 是X x=k/power(1+k*k,0.5) 开平方 cos是y y=1.0/power(1+k*k,0.5) 开平方 gisoracle总结 ============= ...
- javascript: Math.sin() cos() 用法
Math.sin(x) x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x) x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指 ...
- c++中sin,cos,arcsin等和在C/C++中使用pi (π) 值
先 #include<math.h> 反3角函数有 acos(double),asin(double),atan(double),atan(double,double),返回值 doubl ...
- 基于语法分析器GOLD Parser开发的数学表达式计算器
最近发现一款文法分析神器,看完官网(http://goldparser.org/)的介绍后感觉很犀利的样子,于是就拿来测试了一番,写了一个数学表达式分析的小程序,支持的数学运算符如下所示:常规运算:+ ...
- 机器学习:Jupyter Notebook中numpy的使用
一.Jupyter Notebook的魔法命令 # 模块/方法 + ?或者help(模块/方法):查看模块/方法的解释文档: 1)%run # 机械学习中主要应用两个魔法命令:%run.%timeit ...
- MuPAD使用总结
MuPAD使用总结 一.打开notebook界面的方法: 二.notebook界面的三种区域 (一).输入区域 输入区域在打开来的时候就有,就是,但是之后如果还想再加,可以点击上方红色框内的图标. 这 ...
- (3)ES6解构赋值-对象篇
对象的解构赋值(可以不按顺序,但是key必须一样否则为undefined) //demo1 var {name,age} = { name: "Jewave", age:26 }; ...
随机推荐
- C#/VB.NET 比较两个Word文档差异
本文以C#和VB.NET代码为例,来介绍如何对比两个Word文档差异.程序中使用最新版的Spire.Doc for .NET 版本8.8.2.编辑代码前,先在VS程序中添加引用Spire.Doc.dl ...
- C++数的表示
二进制B 八进制O 十进制D 十六进制H / 0x十六进制 十进制数转换成R进制数:整数部分除基取余,上右下左:小数部分乘基取整,上左下右. 浮点数的阶用一种称为移码的编码表示方法,方便对阶.阶的 ...
- C/C++经典面试题1,const关键字用法总结
本文主要说明了const关键字的作用,包括了用于对数组,指针与类相关的修饰方法,作为笔记总结使用.若有错误与不足,欢迎指正. const关键字 用于修饰一个常类型,常类型的变量或对象的值无法被改变,即 ...
- iNeuOS工业互联平台,WEB组态(iNeuView)集成实时预警和报警柱状图
目 录 1. 概述... 2 2. 平台演示... 2 3. 应用过程... 2 4. 实时数据展示效果... 3 1. 概述 对于我们 ...
- 【转】Echarts 数据绑定
Echarts 数据绑定 简单的统计表已经可以生成,不过之前图标数据都是直接写在参数里面的,而实际使用中,我们的数据一般都是异步读取的.EChart.js对于数据异步读取这块提供了异步加载的方法. 绑 ...
- SpringBoot启动注解源码流程学习总结
- idea使用技巧一常用快捷键
快捷键 功能 ctrl+x 删除行 ctrl+d 复制行 ctrl+n 查找类 ctrl+f 查找文本 ctrl+j 自动代码 ctrl+h 显示类结构图 ctrl+q 显示注释文档 ctrl+p 方 ...
- 做SEO必须制定超越竞争对手网站的方案
http://www.wocaoseo.com/thread-131-1-1.html 从开始终学习SEO技术,到现在半年过去了,其间也做了几个站,可是赚钱的并不多,有流量的也不多,虽然说 ...
- 01.图文理解RDB和AOF两种持久化机制
一.RDB和AOF两种持久化机制的介绍 RDB:对redis中的数据执行周期性的持久化,每隔一个时刻生成一个RDB文件,这个RDB文件包含这个时刻所有的数据. AOF:记录每条写入命令,以append ...
- Selenium中核心属性以及方法
一.操作定位元素 selenium提供了定位元素的API,这些方法都被定义在webDriver类中,需要以find开头, 例如:find_Element_by_id('')