如何在短变量中保存sin值

时间:2015-03-05 15:14:15

标签: c

我想将一个sin值的16 MSB保存在一个短变量中,例如:

short x =0;
x = (short ) (sin(3.14) >> 48 );

因为C中sin的返回值是双倍的。但这不起作用,我只是没有得到它! 有没有办法解决这个问题,或者我需要一个额外的功能

2 个答案:

答案 0 :(得分:4)

由于sin(x) 总是[-1..1]范围内,您可以做的最好的事情是

double arg = 3.14; // or whatever
short x = (short) (sin(arg) * 32767); // 32767 is max short

恢复(当您需要实际 sin值时)

double value = x / 32767.0; // <- note the max short form: ".0"

答案 1 :(得分:0)

这是因为sin(3.14)小于1.只有整数部分传递给x,这是0.

48的右移适用于整数。正确移位48位的0并不能使它变得更好。

您可以做的是:

x = (short ) (sin(3.14) *1000);