2

我正在查看几年前编写的其他人的代码,该代码的文档记录非常糟糕。在某一时刻,有以下代码片段:

#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 接受一个 int 并给出它的反正切,它是另一个 int。现在我的麻烦来了,我不明白计算的 arctanx*(1<<BINARYPOINT)将如何给我 x 的 arctan?

谁能解释一下这里发生了什么?

提前非常感谢。

4

1 回答 1

4

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

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

于 2012-10-21T02:21:08.810 回答