好的,这就是我到目前为止所拥有的:
#include <stdio.h>
#include <math.h>
//#define PI 3.14159
int factorial(int n){
if(n <= 1)
return(1);
else
return(n * factorial(n-1));
}
void McLaurin(float pi){
int factorial(int);
float x = 42*pi/180;
int i, val=0, sign;
for(i=1, sign=-1; i<11; i+=2){
sign *= -1; // alternate sign of cos(0) which is 1
val += (sign*(pow(x, i)) / factorial(i));
}
printf("\nMcLaurin of 42 = %d\n", val);
}
void Taylor(float pi){
int factorial(int);
float x;
int i;
float val=0.00, sign;
float a = pi/3;
printf("Enter x in degrees:\n");
scanf("%f", &x);
x=x*pi/180.0;
printf("%f",x);
for(i=0, sign=-1.0; i<2; i++){
if(i%2==1)
sign *= -1.0; // alternate sign of cos(0) which is 1
printf("%f",sign);
if(i%2==1)
val += (sign*sin(a)*(pow(x-a, i)) / factorial(i));
else
val += (sign*cos(a)*(pow(x-a, i)) / factorial(i));
printf("%d",factorial(i));
}
printf("\nTaylor of sin(%g degrees) = %d\n", (x*180.0)/pi, val);
}
main(){
float pi=3.14159;
void McLaurin(float);
void Taylor(float);
McLaurin(pi);
Taylor(pi);
}
这是输出:
McLaurin of 42 = 0
Enter x in degrees:
42
0.733038-1.00000011.0000001
Taylor of sin(42 degrees) = -1073741824
我怀疑这些令人发指的数字的原因是因为我混合了我的花车和整数?但我只是想弄清楚...... !!也许它是一个数学的东西,但它从来都不是我的力量,更不用说微积分程序了。麦克劳林也失败了,它如何等于零? WTF!请帮助纠正我的noobish代码。我还是初学者......
---- ----更新
#include <stdio.h>
#include <math.h>
//#define PI 3.14159
int factorial(int n){
if(n <= 1)
return(1);
else
return(n * factorial(n-1));
}
void McLaurin(float pi){
int factorial(int);
float x = 42*pi/180, val=0;
int i, sign;
for(i=1, sign=-1; i<11; i+=2){
sign *= -1; // alternate sign of cos(0) which is 1
val += (sign*(pow(x, i)) / factorial(i));
}
printf("\nMcLaurin of of sin(%f degrees) = %f\n", (x*180.0)/pi, val);
}
void Taylor(float pi){
int factorial(int);
float x;
int i;
float val=0, sign;
float a = pi/3;
printf("Enter x in degrees:\n");
scanf("%f", &x);
x=x*pi/180.0;
printf("%f",x);
for(i=0, sign=-1.0; i<2; i++){
if(i%2==0)
sign *= -1; // alternate sign of cos(0) which is 1
printf("%f",sign);
if(i%2==0)
val += (sign*sin(a)*(pow(x-a, i)) / factorial(i));
else
val += (sign*cos(a)*(pow(x-a, i)) / factorial(i));
printf("%d",factorial(i));
}
printf("\nTaylor of sin(%f degrees) = %f\n", (x*180.0)/pi, val);
}
main(){
float pi=3.14159;
void McLaurin(float);
void Taylor(float);
McLaurin(pi);
Taylor(pi);
}
给我一些奇怪的错误。
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot open output file a.exe: Device or resource busy
collect2: ld returned 1 exit status
Can anyone explain what's wrong now?
答案 0 :(得分:1)
一些潜在的错误来源:
我想?
答案 1 :(得分:1)
有些事情跳出来了:
McLauren
中,您将val(您的计算值)定义为int。尝试将其定义为浮动Taylor
中,你每隔一段时间只会翻转你的牌子,所以它会变为-1,1,-1,-1,1,1 ......等等sin
或cos
(因为那是你想要计算的)答案 2 :(得分:1)
这个已经提到过的人肯定很麻烦:
此外,在使用printf()打印%f
时,您需要使用%g
或%d
代替val
。这就是为什么你会得到如此疯狂的数字:浮动被解释为整数。
此外,在Taylor()中,您需要将两个if语句更改为
if(i%2==0)
因为你是泰勒扩张罪,而不是cos。
对于MacLaurin和Taylor系列答案,使用与代码中相同数量的术语,分别得到0.669130和0.708945。如果我在Taylor系列答案中添加两个术语(使用i&lt; 4而不是i&lt; 2),我得到0.668793。真正的答案(使用与您使用的相同的pi)是0.669130,泰勒系列答案会增加3个附加术语。