c中 sin函数计算时结果为0.007615361,但是用c运行时却得到0是为什么?

来源:百度知道 编辑:UC知道 时间:2024/06/19 01:07:55
#include<stdio.h>
#include<math.h>
main()
{
int n=1500,angle=25,g1=250,g2=960;
float p=33.1,p1=16.1,d=0.9,d1=0.3,d2=0.22,
m,m1,m2,f,f1,f2,f_ay,f_dy,f_az,f_dz;
m=9549*p/n;
m1=9549*p1/n;
m2=9549*(p-p1)/n;
f2=m*2/d;
f1=m1*2/d1;
f=m2*2/d2/cos(angle/180*3.14);
printf("m=%f\n m1=%f\n m2=%f\n f=%f\n f1=%f\n f2=%f\n",m,m1,m2,f,f1,f2);
f_dy=((g1+3*f1)*3-f*sin(angle/180*3.14)+5*g2)/4;
f_ay=g2+g1+3*f1-f_dy-f*sin(angle/180*3.14);
f_dz=(f*cos(angle/180*3.14)-3*f2*5)/4;
f_az=f*cos(angle/180*3.14)-f_dz-3*f2;
printf("f_ay=%f\n f_dy=%f\n f_az=%f\n f_dz=%f\n",f_ay,f_dy,f_az,f_dz);
}
其中的 f_ay,f_dy求的结果有错,结果因该是-9.1,2810.3左右,是因为计算中把sin计算时算成结果为0了,
要得到真确结果要怎要修改?

原因有二:
1.这也是最重要的,在c中整数除以整数为整数,所以angle/180=0,并不是你期望的0.1388888,应该写成angle/180.0
2.这也是不容忽视的,对于c中经常用到的常数,像π,e等,比较规范的写法是在宏定义中给出#define PI 3.141592653589793,直接用3.14代替一方面容易写错,另一方面太不精确.

建议:看到你写的程序,很多地方都不规范,像整数除以整数的问题,上面还要几处,而且变量名字也取得很随意,程序几乎没有可读性.最好是找一本编程比较规范的书看看.像数据结构上面的程序,写的都很精炼而且很规范.

将整型改为浮点型。小数多留几位。
例如:angle/180*3.14这个情况的话小数会没掉。