cos功能使我零

Cos function giving me zero

本文关键字:功能 cos      更新时间:2023-10-16

我是编程的完整初学者,我得到了以下任务:

编写一个C 程序,该程序使用一系列刻有常规多边形的序列计算一对π的估计值。在不超过30个步骤后停止,或者当限制和铭文多边形的周围差异小于ε=10⁻⁻⁵的公差时。您的输出应具有三个列,对于侧面数,刻有多边形的周长和限制多边形的周长。对于最后两列,在小数点后显示14位数字。

好吧,我决定使用cos的法律来找到多边形的侧面的长度,但是当我测试程序时,我意识到了这一行:a = cos(360/ngon(;一直给我一个零作为输出,这也使其他所有内容也为零,我不确定有什么问题,请提供帮助。P.S.抱歉,如果该程序看起来真的很草率,我对此真的很糟糕。

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#define _USE_MATH_DEFINES
#include <math.h>
#include <cmath>
using namespace std;
int main()
{
	char zzz;
	int ngon = 3, a, ak;
	double insngon = 0.0;
	double cirngon = 0.0;
	cout << "Number of Sides" << "ttt" << "Perimeter of insribed region" << "ttt" << "Perimeneter of circumscribed polygon" << "tt" << "n";
	while (ngon <= 30)
	{
		a = cos(360 / ngon);
		ak = pow(.5, 2) + pow(.5, 2) - 2 * .5*.5*a;
		insngon = (ak*ngon);
		cirngon = (ak / (sqrt(1 - pow(ak, 2))));
		cout << fixed << setprecision(14) << ngon << "                               " << insngon << "                                " << cirngon << endl;
		ngon++;
		if (cirngon - insngon <= pow(10.0, -15));
		cin >> zzz;
		return 0;
	}
	cout << "nEnter any character and space to end ";
	cin >> zzz;
	return 0;
}

一个问题是您声明了整数,但是您在cos的呼叫中使用它们:

int ngon = 3, a, ak;
//...
a = cos(360 / ngon);

由于a是一个整数,因此cos的返回值(double类型(将被截断。另外,由于ngon是一个整数,因此360 / ngon也将截断。

修复程序是使a A double,然后由ngon除以360.0,以防止截断:

int ngon = 3, ak;
double a;
//...
a = cos(360.0 / ngon);

在评论中指出的另一个问题是,三角函数在C 中使用弧度作为参数,而不是学位。您需要将论点更改为弧度的等效价值。

另一个问题是您使用pow来计算恒定值。无需引入不必要的函数调用来计算常数值。只需定义常数并使用它们即可。

例如:

const double HALF_SQUARED = 0.25
const double EPSILON_VALUE = 10.0e-15;

然后使用HALF_SQUAREDEPSILON_VALUE,而不是对pow的调用。

另外, pow本身就是浮点功能,因此可以产生不准确的结果,而不是该问题所讨论的。因此,pow(ak, 2)应简单地替换为ak * ak

使用 float a;(或double a(代替int a。

在这里,a的返回类型是int并计算

a = cos(360/ngon)

相当于cos(120(的结果为0.8141的a = cos(120(,并且是整数类型" a",只能存储整数零件。因此," A"将为0并丢弃浮动值。还使用double ak;代替int ak;。因为这里使用了POW功能,该功能具有返回类型的'double'