2015-04-02 3 views
0

Там, кажется, ошибка в заголовке math.h предоставляется Visual Studio 2005.Параметры для atan2() указаны неверно в VS2005?

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. Кто-нибудь знает, что счет здесь?

+0

Ну, некоторые обсуждения об этом: http://www.ogre3d.org/forums/viewtopic.php?f=10&t=54415. Проверьте, сравнивая результаты atan2f (x, y) и atan2f (y, x), если это опечатка или они действительно в неправильном порядке. Тогда вы узнаете :) – senfen

ответ

0

Разница, которая не влияет, не стоит беспокоиться.

Компилятор (по сути) игнорирует имена аргументов atan2(), поскольку это не определение (т. Е. Реализация функции). Пока определение функции (реализация) вычисляет арктангенс в радианах первого аргумента, деленное на второе, выполняется реализация atan2().

Важно, чтобы ошибка в этом определении atan2f() заключалась в том, что первый и второй аргументы передаются в atan2() в том же порядке. Это происходит, поэтому (при условии правильности определения atan2()) функционального дефекта нет, а выражение atan2f(a,b) будет вычислять арктангенс a/b - это то, что требует стандарт.

Единственный потенциальный недостаток заключается в понимании людьми того, что делают функции. Но, вообще говоря, желательно, чтобы люди ссылались на документацию стандартных функций для понимания, а не на файлы заголовков. Это стилистический недостаток, а не функциональный.

Смежные вопросы