这个按位转换是做什么的?

时间:2012-10-21 02:12:23

标签: c floating-point binary

我正在查看几年前编写的其他人的代码,这些代码非常难以记录。有一段时间有以下代码片段:

#define BINARYPOINT 16
....
float x;
int y;
int z;
....
....
//x has new values now
y = (int) (x*(1<<BINARYPOINT));
z = arctan2(y);
x = z;

在代码中y被明确地用于计算它的arctan,函数arctan接受一个int并给出它的另一个int的arctan。现在我的麻烦就在这里,我不知道如何计算x*(1<<BINARYPOINT)的arctan会给我x的arctan?

有人可以解释一下这里发生了什么吗?

提前多多感谢。

1 个答案:

答案 0 :(得分:4)

该代码正在执行Binary Scaling。浮点数转换为具有B16二进制标度的整数表示,然后调用函数arctan2。这是一个采用整数参数并知道它正在使用B16比例因子的例程。这不是采用atan参数的标准double调用。

请注意,函数的名称arctan2使它看起来像是arctan的两个参数版本,所以你应该检查它并确保你正在进行正确的调用。