gpt4 book ai didi

c++ - Cos 函数给我零

转载 作者:行者123 更新时间:2023-11-28 01:35:29 37 4
gpt4 key购买 nike

我是一个完全的编程初学者,我被分配了以下任务:

编写一个 C++ 程序,使用一系列内接和外接正多边形计算一对 π 的估计值。在不超过 30 步后停止,或者当外接多边形和内切多边形的周长之差小于 ε=10⁻¹⁵ 的公差时停止。您的输出应包含三列,分别为边数、内接多边形的周长和外接多边形的周长。对于最后两列,显示小数点后 14 位。

好吧,我决定使用 cos 法则来计算多边形边的长度,但是当我测试我的程序时,我发现了这条线:a = cos(360/ngon);一直给我一个零作为输出,这使得其他一切也都为零,我不确定出了什么问题请帮忙。附言对不起,如果程序看起来很马虎,我真的很不擅长这个。

#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" << "\t\t\t" << "Perimeter of insribed region" << "\t\t\t" << "Perimeneter of circumscribed polygon" << "\t\t" << "\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 设为 double,并将 360.0 除以 ngon 以防止截断:

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 本身是一个浮点函数,因此会产生不准确的结果 as is discussed by this question .因此 pow(ak, 2) 应该简单地替换为 ak * ak

关于c++ - Cos 函数给我零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471975/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com