我想将一个sin值的16 MSB保存在一个短变量中,例如:
short x =0;
x = (short ) (sin(3.14) >> 48 );
因为C中sin的返回值是双倍的。但这不起作用,我只是没有得到它! 有没有办法解决这个问题,或者我需要一个额外的功能
答案 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);