0

math.hVisual Studio 2005 で提供されているヘッダーに誤りがあるようです。

double  __cdecl atan2(__in double _Y, __in double _X);

inline float atan2f(__in float _X, __in float _Y)
    {return ((float)atan2((double)_X, (double)_Y)); }

atan2f() 関数のパラメータが逆になっているようです。

これが新しいバージョンの Visual Studio に当てはまるかどうかはわかりません。ここのスコアわかる人いますか?

4

1 に答える 1

0

影響のない違いは気にする必要はありません。

コンパイラは (事実上) の引数の名前を無視しますatan2()。これは、定義 (つまり、関数の実装) ではないためです。関数の定義 (実装) が、最初の引数を 2 番目の引数で割った値のアークタンジェントをラジアンで計算する限り、 の実装atan2()は正しいです。

この の定義でバグを回避するために重要なことは、最初と 2 番目の引数が同じ順序で にatan2f()渡されることです。atan2()それが起こっているので、( の定義atan2()が正しいと仮定すると) 機能上の欠陥はなく、式atan2f(a,b)は のアークタンジェントを計算しますa/b- これは標準が要求するものです。

唯一の潜在的な欠陥は、関数が何をするかを人間が理解することです。しかし、一般的に言えば、人間はヘッダー ファイルよりも標準関数のドキュメントを参照して理解することをお勧めします。これは文体上の欠陥であり、機能上の欠陥ではありません。

于 2015-04-02T09:13:58.000 に答える