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 }; ...
随机推荐
- SpringBoot整合Redis、mybatis实战,封装RedisUtils工具类,redis缓存mybatis数据 附源码
创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...
- 细讲前端设置cookie, 储存用户登录信息
细讲前端设置cookie 引言 正文 一.设置cookie 二.查看cookie 三.删除cookie 四.封装cookie操作 结束语 引言 我们都知道如果想做一个用户登录并使浏览器保存其登录信息, ...
- 修改linux 动态ip为静态ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static 设置网卡引导协议为 静态 ONBOOT=yes 网卡开机自启动 配置[IP ...
- 修改vsftpd的默认根目录/var/ftp/pub到另一个目录
修改ftp的根目录只要修改/etc/vsftpd/vsftpd.conf文件即可: 加入如下几行: local_root=/var/www/html chroot_local_user=YES ano ...
- Latex — 写作编译过程中遇到问题记录与总结
最近在训练的时候,又开始用Latex进行写作.碰到了很多问题,将问题进行记录与总结. 一.输出中文的问题 由于写作的时候用的是中文,而之前用的是英文,故碰到的第一个问题就是中文的问题.我之前下的是Wi ...
- 浅析 MVC
MVC(Model–View–Controller) Model:数据模型 负责操作所有数据View:视图 负责所有UI界面Controller:控制器 负责其他 //数据放在m const m = ...
- LG P6788 「EZEC-3」四月樱花
Description 在樱花盛开的四月,Muxii 望着满天飘落的樱花,向身旁的 ZZH 问道: “究竟有多少朵樱花在这个四月飘落?” ZZH 答道:“樱花飘落的朵数 $s$与时间 $t$ 有如下 ...
- P1227 【[JSOI2008]完美的对称】
这道题,先讲一下我的做题思路 这道题的最主要的目的就是算出中心,我下面称为中点.这个中点其实很好算的,我们只需要算出最左下角的坐标和最右上角的坐标,然后用中点坐标公式算出来就ok了,那么这道题就做完了 ...
- failed to resolve org.junit.platform
IDEA提示:failed to resolve org.junit.platform,如下图 方法一:修改Maven镜像 D:\Program Files\apache-maven-3.6.3-pc ...
- Fiddler添加显示ip和响应时间
1. 打开Fiddler,在菜单Rules 栏里点击Customize Rules…或者使用快捷键CTRL+R打开Fiddler ScriptEditor 图 1 Customize Rules 2. ...