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 であるそれのアークタンを提供します。ここで問題が発生しました。 のアークタンを計算するx*(1<<BINARYPOINT)と、x のアークタンがどのように得られるかわかりません。

ここで何が起こっているのか誰か説明してもらえますか?

よろしくお願いします。

4

1 に答える 1

4

そのコードはBinary Scalingを行っています。浮動小数点数は、B16 バイナリ スケールの整数表現に変換されてから、関数arctan2が呼び出されます。これは、整数の引数を取り、B16 スケール ファクタを使用していることを認識しているルーチンです。引数atanを取るのは標準的な呼び出しではありません。double

関数の名前 はarctan2、arctan の 2 つの引数のバージョンを意図しているように見えるので、それを調べて、正しい呼び出しを行っていることを確認する必要があります。

于 2012-10-21T02:21:08.810 に答える