假设我有两个函数f1f2,我想在一个短变量中获得它们之间的相变:

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是short,因此它们的差将在[-65535,65535]范围内。将(y-x)除以一个整数将导致整数除法,该整数除法几乎总是返回0,因为|y-x| <= 0xFFFF。您需要通过将/运算符的任一侧强制转换为浮点或双精度来进行浮点除法

angle = asin((y-x)/65535.0); // or angle = asin((y-x)/(float)0xFFFF);


这里又出现了另一个问题。 asin返回[-pi / 2,+ pi / 2]范围内的双精度,因此您需要使用浮点类型来保持其精度,否则弧度角将被转换为[-pi]范围内的int。 1,1]

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

关于c - 如何将asin结果保存在短变量中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28883277/

10-11 23:06
查看更多