【问题标题】:Sinus taylor series in CC中的窦泰勒系列
【发布时间】:2021-02-08 03:38:09
【问题描述】:

您好,我有一个assignemt,我必须创建一个函数,该函数使用泰勒级数计算给定x 值的sin 值。我写了以下代码,似乎问题出现在阶乘部分,但我不确定?


#include<math.h>
#include<stdio.h>


double x;
int n;
double fact = 3;
double sum = 0;
double factsum = 1;


int factf(double fact)
{
    
    for (int i = 1; i < fact; i++)
    {
        factsum = factsum * i;
    }
}
double taylor_sine(double x, int n)
{
    x = (x*3.14)/180;
    for (int i = 0; i < n; i++)
    {
        sum = sum + (pow(x, fact)/factf(fact));
        fact = fact + 2;
        factsum = 1;
    }
    sum = x - sum;
}

int main(void)
{
    printf("Enter the value for x\n");
    scanf("%lf", &x);
    printf("Enter the number of precision\n");
    scanf("%d", &n);
    
    taylor_sine(x, n);
    
    printf("Sum = %lf\n", sum);
}

【问题讨论】:

  • 没有void以外的函数返回任何值!
  • 至少为 pi 使用一个不错的值。
  • factf 返回一个int(或者至少它被声明返回一个int)。它应该返回一个double
  • 好收获。函数factf() 正在维护一个全局产品,但调用者忽略了它。这是一种可怕的做法,就像为下次使用设置一个变量一样,而不是在使用前设置它。无论如何,factf() 函数应该明确地以1 开头,而不是依赖于在其他地方完成。 “意大利面条”代码。
  • PI Day Million Digits 很有帮助。您甚至可以收集足够的数据来支持 128 位 double 计算。 Taylor Series sine/cosine 的有用示例

标签: c trigonometry taylor-series


【解决方案1】:

你的代码有几个问题,最关键的是:

您的阶乘函数计算 (n - 1) 的阶乘。

它不返回计算值 (return factsum;)。

您错误地对待交替符号。您必须在每次迭代中更改符号。

正如其他人已经指出的那样,您应该真正使用函数的返回值而不是写入全局变量。

您使用浮点“精度”参数作为泰勒项的最大数量。

这些固定后,计算就可以工作了(尽管效率低且精度差)。

【讨论】:

  • 为了进一步阐明给定状态的分配,我必须使用 x 输入作为角度的度数和 n 的精度。我知道taylor系列的准确性很差,但是这是为了学习如何制作一个库以供以后使用。我已经尝试更新代码但仍然没有运气
  • 原帖中添加的更新
  • 对于小角度来说,泰勒级数还不错。为了提高准确性,您应该使用更好的 π 近似值。另请注意,您不能计算太多的级数项,因为阶乘很快就会离开int 的范围。
  • 对不起,我还是新手使用 Stackoverflow 和编程 :) 我想我想通了,问题是我的预期与返回的准确性,我将阶乘更改为双倍,以及 pi 的精度,它给出了更好的结果。感谢您的帮助:)
猜你喜欢
  • 2017-04-05
  • 2011-11-04
  • 1970-01-01
  • 2020-04-10
  • 2014-02-23
  • 1970-01-01
  • 2017-06-22
  • 2017-06-06
  • 2017-09-27
相关资源
最近更新 更多