正弦级数方程无法正确计算

时间:2018-10-28 20:24:51

标签: c++

我在代码中找不到逻辑错误。 整个事情在数学上是错误的吗? 还是部分正确?

float x,term,fx;
int i, nterms;
cin>>x>>nterms;
for(i=1;i<=nterms;i+=2){ 
term=1;
fact=1;
for(j=1;j<=i;j++){
        term=term*x;
        fact=fact*j;
}
sign=-1*sign;
fx+=sign*term/fact;
}

cout << fixed << showpoint;
cout << setprecision(6);
cout<<fx;

1 个答案:

答案 0 :(得分:0)

我已逐步修复了您的代码,由于无法确定您要在代码中执行的操作,因此无法继续进行。如果您告诉我们它们是什么,我将可以修复此代码。

#include <iostream>
#include <iomanip>
#include <stdio.h>

int main() {
  long double x,term,fx, fact;
  int i, j, nterms;
  int sign;

  std::cin>>x>>nterms;
  term=1;
  fact=1;
  sign=1;
  fx = 0;
  for(i=1;i<=nterms;i+=2){ 
    for(j=1;j<=i;j++){
      term=term*x;
      fact=fact*j;
    }
    sign=-1*sign;
    fx+=sign*term/fact;
  }
  std::cout << std::setprecision( 6 )  << fx << std::endl;
}

此处有一些说明:

  1. 似乎{strong> using namespace 已用于std请谨慎使用,因为某些命名空间之间可能会发生冲突。这个page(法语)建议了两个用例。

    a。导入符号一个

    using std::cout; 
    using std::endl; 
    

    b。仅在本地范围中使用它们(例如,在花括号中):

    void a_function() { 
        // std will be imported only within this block 
        using namespace std;   
       cout << "hello there" << endl; // will work
    }
    
  2. 声明变量,然后再使用它们。将我的答案与您的代码示例进行比较。

  3. 请注意类型可以处理的最小和最大值。您的函数似乎可以处理非常大或很小的值。我将其类型更改为long double (但是这只是进一步解决了问题)。你有范围。看看这个SO answer。它导致limit.h,显示数字限制。选择最安全的方式存储您的值(或为用户输入设置最大值和最小值)。