gpt4 book ai didi

c - 使用泰勒展开的正弦函数(C 编程)

转载 作者:行者123 更新时间:2023-12-01 01:22:01 25 4
gpt4 key购买 nike

Here问题是..

这是我迄今为止所做的,

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

long int factorial(int m)
{
if (m==0 || m==1) return (1);
else return (m*factorial(m-1));
}
double power(double x,int n)
{
double val=1;
int i;
for (i=1;i<=n;i++)
{
val*=x;
}
return val;
}

double sine(double x)
{
int n;
double val=0;
for (n=0;n<8;n++)
{
double p = power(-1,n);
double px = power(x,2*n+1);
long fac = factorial(2*n+1);
val += p * px / fac;
}
return val;
}

int main()
{
double x;
printf("Enter angles in degrees: ");
scanf("%lf",&x);
printf("\nValue of sine of %.2f is %.2lf\n",x,sine(x * M_PI / 180));
printf("\nValue of sine of %.2f from library function is %.2lf\n",x,sin(x * M_PI / 180));
return 0;
}

问题是该程序在 0 到 180 度范围内都可以正常工作,但超出此范围它会出错。同样,当我增加 n 的值时在 for (n=0;n<8;n++)超过8,我得到了重大错误..算法没有问题,我已经在我的计算器中测试过了,程序似乎也很好..我认为问题是由于数据类型的范围..我应该纠正什么来摆脱这个错误?
谢谢..

最佳答案

您是正确的,错误是由于数据类型的范围造成的。在 sine() 中,您正在计算 15 的阶乘,这是一个巨大的数字,不适合 32 位(这可能是您的系统上实现的 long int )。要解决此问题,您可以:

  • 重新定义阶乘以返回 double 值。
  • 重新编写代码,将幂和阶乘合并为一个循环,该循环交替乘以 x,然后除以 i。这将看起来更困惑,但会避免溢出 double 的可能性(当然,我认为这对您的用例来说不是问题)。
  • 关于c - 使用泰勒展开的正弦函数(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647126/

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