我是否错误地使用Xcode或错误地编写了该程序
Did I use Xcode incorrectly or I wrote the program incorrectly?
,所以我正在做一个有关正弦的问题。
它说sin x可以通过多项式x-(x^3/6) (x^5/120) - (x^7/5040)近似,它告诉我要输出两个近似sin值和通过cmath计算的罪价值。
输入为程度,我们必须首先将其转换为弧度,然后发现罪。
示例运行(只有45个是输入,其他我们的输出):
角度:45大约= 0.70710647cmath sin = 0.70710678
我试图为此编写代码。当我按下Command R时,尽管该程序说"构建成功",但没有任何事情发生。我是Xcode的新手,因此我不确定是否错误地使用了Xcode或错误地编写了该程序。谁能帮忙?
#define _USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double approxSin(double angleDeg) {
if (-180<angleDeg<180) return approxSin(angleDeg-(angleDeg*angleDeg*angleDeg)/6+(angleDeg*angleDeg*angleDeg*angleDeg*angleDeg)/120-(angleDeg*angleDeg*angleDeg*angleDeg*angleDeg*angleDeg*angleDeg)/5040);
}
int main(){
float angleDeg;
cin >> angleDeg;
if (angleDeg>180) {
while (angleDeg>180) {
angleDeg = angleDeg-360;
}
} else if (angleDeg<-180) {
while (angleDeg<-180) {
angleDeg = angleDeg+360;
}
}
cout << "approxSin = " << &approxSin << endl;
cout << "cmath sin = " << setprecision(8) << sin(angleDeg);
return 0;
}
我的代码
我的猜测关于您的问题:您运行程序,它耐心地等待您的输入。
cin >> angleDeg;
您的程序似乎停止了,而它正在等待您在IDE控制台窗口中提供一些输入。由于您没有写任何提示,因此没有输出可以告诉您它正在等待输入。
我建议您先添加一些输出以要求输入:
cout << "Please enter angle in degrees: ";
cin >> angleDeg;
当我按下命令 r时,尽管程序说"构建成功",但没有发生任何事情。
我猜想某个程序员的答案应该解决此问题,但是,如评论中所述,已发布的代码中存在更糟糕的问题,这可能取决于对应如何声明和在C 中调用功能的误解。。
考虑一下:
double approxSin(double angleDeg) {
if (-180<angleDeg<180) return approxSin(/* Some unreadable expression */);
}
足以生成几个警告:
PROG.CC:7:22:警告:将常数180与"布尔"类型的表达进行比较的结果 总是真实的[-wtautological-contant-of-of-of范围能力] if(-180&ltangledeg&lt180)返回大约(Angledeg - (...)); ~~~~~~~~~~~~~~^~~~PROG.CC:6:35:警告:通过此功能的所有路径都会自称为[-winfinite-recursion]double of coutsin(double angledeg){ ^
将关系运算符从左到右评估,因此编译器将像-180<angleDeg<180
这样的表达式读取为(-180 < angleDeg) < 180
。-180 < angleDeg
的结果是bool
,它导致编译器关于该表达式蜜蜂的友好警告始终是正确的。
它可以写为-180 < angle && angle < 180
,但是鉴于OP的分配,应针对Plus或减去PI测试角度。另外,替代分支也应写入。
第二个警告是关于该功能的递归呼声,这是没有任何其他路径的毫无意义的。我只能猜测OP误解了如何从函数返回值的值。
可以使用std::pow
或应用Horner的方法以更可读的方式评估多项式本身。我稍后再说一个例子。
另一个大问题(镜头,某种程度上)在"呼叫"网站中,这根本不是呼叫:
cout << "approxSin = " << &approxSin << endl;
它最终打印了1
,原因可以在此Q&amp; A:如何用COUT打印功能指针?
最后,我会注意到,虽然分配专门需要将输入的角度从学位转换为弧度(如std::sin
的参数),但已发布的代码仅在不转换时检查范围。
以下实现比较了评估SIN()函数的不同方法
#define _USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
#include <cmath>
namespace my {
// M_PI while widespread, isn't part of the ISO standard
#ifndef M_PI
constexpr double pi = 3.141592653589793115997963468544185161590576171875;
#else
constexpr double pi = M_PI;
#endif
constexpr double radians_from_degrees(double degrees)
{
return degrees * pi / 180.0;
}
constexpr double convert_angle_to_plus_minus_pi(double angle)
{
while ( angle < -pi )
angle += 2.0 * pi;
while ( angle > pi ) {
angle -= 2.0 * pi;
}
return angle;
}
// Approximates sin(angle), with angle between [-pi, pi], using a polynomial
// Evaluate the polynomial using Horner's method
constexpr double sin_a(double angle)
{
// A radian is passed, but the approximation is good only in [-pi, pi]
angle = convert_angle_to_plus_minus_pi(angle);
// Evaluates p(a) = a - a^3 / 6 + a^5 / 120 - a^7 / 5040
double sq_angle = angle * angle;
return angle * ( 1.0 + sq_angle * (-1.0/6.0 + sq_angle * ( 1.0/120.0 - sq_angle / 5040.0)));
}
double sin_b(double angle) {
angle = convert_angle_to_plus_minus_pi(angle);
return angle - pow(angle, 3) / 6.0 + pow(angle, 5) / 120.0 - pow(angle, 7) / 5040.0;
}
} // End of namespace 'my'
int main()
{
std::cout << " angle std::sin my::sin_a my::sin_bn"
<< "-----------------------------------------------n"
<< std::setprecision(8) << std::fixed;
for (int i = -90; i < 475; i += 15)
{
double angle = my::radians_from_degrees(i);
std::cout << std::setw(5) << i
<< std::setw(14) << std::sin(angle)
<< std::setw(14) << my::sin_a(angle)
<< std::setw(14) << my::sin_b(angle) << 'n';
}
return 0;
}
- 程序崩溃并显示"std::out_of_range"错误
- xmake总是报告:错误:无法获取cxx的程序,为什么
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 分段错误当我试图运行程序时出错
- 显示错误输出的简单数组排序程序
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 在气泡排序程序中未声明错误功能
- 我在c ++矩阵计算器程序中找不到错误
- 叮当格式化程序多行格式配置错误
- 全局向量导致 C++ 程序结束时出现段错误
- 运行时间错误:程序跳过提示,以获取第二名和第三个名称
- Glibc 2.7 配置错误程序太旧
- 运行时错误:程序已停止响应
- OpenCV for Android:在 PATH 中找不到错误程序"sh"
- C++中的 scanf 错误 - 程序没有响应
- c++语法错误:程序以非零状态退出
- 运行时错误C++程序:检测到glibc,munmap_chunk(),指针无效
- libxml2错误程序c++