C 如何将asin结果保存在短变量中?

C 如何将asin结果保存在短变量中?,c,C,假设我有两个函数f1和f2,我想在一个短变量中得到它们之间的相位变化: short x=15615, y=24045; short angle =0; angle = asin((y-x)/0xFFFF); angle = angle * 180/M_PI; printf(" the winkel is : %d \r\n" , ( short)( angle)); 无论我改变什么,我只得到0!知道我做错了什么吗 (y-x)/0xFFFF始终给出0 假设short为16位。(y-x)无法

假设我有两个函数
f1
f2
,我想在一个短变量中得到它们之间的相位变化:

short  x=15615, y=24045;
short angle =0;

angle = asin((y-x)/0xFFFF);
angle = angle * 180/M_PI;

printf(" the winkel is : %d \r\n" , ( short)( angle));
无论我改变什么,我只得到
0
!知道我做错了什么吗

(y-x)/0xFFFF始终给出0

假设
short
为16位。
(y-x)
无法超过
0xFFFF
,并且
0xFFFF
属于
int
类型。所以它的计算结果总是0

请尝试以下方法:

((float)(y-x))/0xFFFF

y和x是
short
s,因此它们的差异将在[-65535,65535]范围内。(y-x)除以一个整数将得到一个整数除法,几乎总是返回0,因为
|y-x |
(y-x)/0xFFFF
总是给0。请查看数据类型。。不要使用short,使用float除了始终为零的除法外,angle是一个short,因此的返回值在转换为degree之前被截断为一个整数,因此它不再正确这很有意义,感谢您的回答,但是如果我改变x和y会有帮助吗datatpe@Engine这肯定会有帮助的。@lu谢谢你的回答。这是有道理的,但仍然不起作用
angle = asin((y-x)/65535.0); // or angle = asin((y-x)/(float)0xFFFF);
double rad_angle;
short angle; // no need to initialize it here

rad_angle = asin((y-x)/65535.0);
angle = rad_angle * 180/M_PI;

printf("The winkel is %d\n", angle); // no need to use `'\r'` here because `'\n'` will automatically be converted if needed