c计算sin()函数的近似值,不使用函数库

这篇博客讲述了如何不使用数学库函数,而是通过自编函数实现sin和cos的近似计算。作者通过泰勒公式,编写了mysin和mycos函数,实现了对sin(π/2)和cos(87°)的计算,并讨论了程序中可能出现的错误和优化方法,强调了变量功能的单一性以及函数的通用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是自己写的代码如下:

// sinx.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "math.h"

//该函数计算阶乘
double ProductFunc(double x)
{
	double product =x;

	while (1!=x)
	{
		product *= (--x);
	}
	return product;
}

double myTestFunc(double inputx)
{
	//分子
	double fenzi = inputx;

	//符号
	int fuhao = 1;

	//分母
	double fenmu = 1;

	//分母总和
    double fenmuS = 1;

	//记录总结果总和
	double sum = 0;

	//循环递归调用
	do 
	{
	    //累加计算
		sum += fuhao*fenzi /fenmuS;

		//分子变化
		fenzi *= inputx*inputx;

		//符号变化
		fuhao = fuhao *(-1);

		//分母变化
		fenmu += 2;

		//分母总和变化
		fenmuS = ProductFunc(fenmu);

	} while (abs(fenzi/fenmu)>1e-5);//循环条件

	    //返回总和
		return sum;
}

#define PI 3.1415926

int _tmain(int argc, _TCHAR* argv[])
{

    double inputx = (PI)/6;

	double kk = myTestFunc(inputx);

	double kkk = sin(inputx);

	return 0;
}


对比大牛代码:


先听故事,再编程序。故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?他说:是啊,太乐了!故事讲完了。不懂吗?好好学高数。否则,挂了不冤。


 
编程序求出sin(π/2)、cos(87°)
程序的要求是这样的:(1)求sin、cos时,不能用数学库函数(即不得用#include<Cmath>),而是自己编函数实现,为区别,可以分别起名为mysin和mycos;(2)自定义函数要写在main函数之后;(3)自定义函数的效率问题必须考虑;(4)关于精度:当最后一项的绝对值小于0.00001时,累加结束。


实验目的:学会使用自定义函数解决实际问题
实验内容:定义自定义函数,计算sin和cos的近似值

【先上调试后正确的程序】此程序上我也经历了和大家一样的磨难,犯的错误很“隐蔽”,将在后面细表。

  1. /* 程序头部注释开始 
  2. * 程序的版权和版本声明部分 
  3. * Copyright (c) 2011, 烟台大学计算机学院学生 
  4. * All rights reserved. 
  5. * 文件名称: sin_and_cos.cpp                            
  6. * 作    者: 贺利坚                            
  7. * 完成日期: 2011 年 11 月 22 日 
  8. * 版本 号: v2.0         
  9.   
  10. * 对任务及求解方法的描述部分 
  11. * 输入描述:无 
  12. * 问题描述:自定义函数,用泰勒公式实现计算sin和cos的近似值,要求:(1)求sin、cos时,不能用数学库函数(即不得用#include<Cmath>),而是自己编函数实现,为区别,可以分别起名为mysin和mycos;(2)自定义函数要写在main函数之后;(3)自定义函数的效率问题必须考虑;(4)关于精度:当最后一项的绝对值小于0.00001时,累加结束。 
  13. * 程序输出:sin(π/2)、cos(87°)的值(提示:用泰勒公式在π/2附近误差较大,输出分别为0.911557和-0.26322,而真值分别为1和0.052336,当度数较小时,效果要好一些。) 
  14. * 算法设计:使用泰勒公式 
  15. * 程序头部的注释结束(此处也删除了斜杠) 
  16. */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值