gpt4 book ai didi

c - 我的正弦 : what is wrong with my function?

转载 作者:行者123 更新时间:2023-11-30 19:57:00 24 4
gpt4 key购买 nike

好吧,我已经尝试了所有我能想到的方法,但还是无法弄清楚如何让这个程序运行。我已经测试了 main 中使用的所有函数,但无论如何都将它们包含在内,以防万一其中存在一些错误。不过,我相信我的错误很可能是主要的。

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

#define PI 3.14159265359

double int_power(double x, int e);


int main()
{
int my_factorial(int n);
double my_sine_taylor(double x);
double my_sine(double x);
double mod_two_pi(double x);
double get_double(void);
void safeGetString(char arr[], int limit)

char arr[255];
double x,y,ans;

printf("Enter a number: ");
safeGetString(arr[255],255);
my_sine(mod_two_pi(get_double()));
printf("The sine is %f \n", ans);

return 0;
}

/*
int_power should compute x^e, where x is a double and e is an integer.
*/
double int_power(double x, int e)
{
int i = 0;
double ans = 1;
while(i <= e)
{
ans = ans*x;
i++;
}

return ans;
}

/*
my_factorial will find the factorial of n
*/
int my_factorial(int n)
{
int i = n;
int ans = 1;

while(i > 0)
{
ans = ans*i;
i = i-1;
}

return ans;
}

/*
my_sine_taylor computes the approxmiation
of sin(x) using the taylor series up through x^11/11!
*/
double my_sine_taylor(double x)
{
return x - int_power(x,3)/my_factorial(3) + int_power(x,5)/my_factorial(5) -
int_power(x,7)/my_factorial(7) + int_power(x,9)/my_factorial(9) -
int_power(x,11)/my_factorial(11);
}

/*
my_sine(x) should return a very good approximation of sin(x).
It should first reduce x mod 2pi and then map the result into the
upper right quadrant (where the taylor approximation is quite accurate).
Finally, it should use my_sine_taylor to compute the answer.
*/

double my_sine(double x)
{
double ans;

if (x >= 0 && x <= PI/2){
ans = my_sine_taylor(x);
} else if (x > PI/2 && x <= PI){
x=PI-x;
ans = my_sine_taylor(x);
} else if (x > PI && x <= 3*(PI/2)){
x = x-PI;
ans = -(my_sine_taylor(x));
} else {
x=2*PI-x;
ans = -(my_sine_taylor(x));
}
}

/*
mod_two_pi(x) should return the remainder when x
is divided by 2*pi. This reduces values like
17pi/2 down to pi/2
*/
double mod_two_pi(double x)
{
int y;
y = floor(x/(2*PI));
x = x - 2*PI*y;
return x;
}

/*
get_double and safeGetString are used to get floating point
input from the user
*/
double get_double(void)
{
double x;
char arr[255];
x=atof(arr);
}

void safeGetString(char arr[], int limit)
{
int c, i;
i = 0;

c = getchar();
while (c != '\n'){
if (i < limit -1){
arr[i] = c;
i++;
}
c = getchar();
}
arr[i] = '\0';
}

最佳答案

天哪...从哪里开始?

让我们看看...

<小时/>

你有这个功能:

double get_double(void)
{

double x;

char arr[255];

x=atof(arr);
}

你这样称呼:

my_sine(mod_two_pi(get_double()));

因此,您没有向其发送任何内容,但您希望获得一些有意义的值。基本上,arr[255] 没有初始化,因此它保存着垃圾。您正在获取这些垃圾并使用 atof 将其转换为 float ,但这不会执行任何操作。

如果我不得不猜测,我会说这才是真正破坏你的程序的原因。我在下面写的其余内容只是评论。

<小时/>

出于某种原因,您在内部声明了所有这些函数您的main。我认为这不会破坏任何东西,但它确实是糟糕的编码风格。

<小时/>

my_sine_taylor 使用正弦的 6 元素泰勒近似进行计算。您确定需要这种准确性吗? 11! 非常大,某些数字的 11 次方也可能非常大。您可能会引入不必要的舍入或溢出错误。

关于c - 我的正弦 : what is wrong with my function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4311216/

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