我正在查看几年前编写的其他人的代码,这些代码非常难以记录。有一段时间有以下代码片段:
#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?
有人可以解释一下这里发生了什么吗?
提前多多感谢。
答案 0 :(得分:4)
该代码正在执行Binary Scaling。浮点数转换为具有B16二进制标度的整数表示,然后调用函数arctan2
。这是一个采用整数参数并知道它正在使用B16比例因子的例程。这不是采用atan
参数的标准double
调用。
请注意,函数的名称arctan2
使它看起来像是arctan的两个参数版本,所以你应该检查它并确保你正在进行正确的调用。