Как работает pow() в С++?

190
20 мая 2019, 08:30

Решил глянуть код С++ -ного pow() . Как это работает?

_Check_return_ inline double pow(_In_ double _Xx, _In_ int _Yx) noexcept
    {
    if (_Yx == 2)
        return (_Xx * _Xx);
    return (_CSTD pow(_Xx, static_cast<double>(_Yx)));
    }

А конкретно эта строка:

(_CSTD pow(_Xx, static_cast<double>(_Yx)))

static_cast<double>(_Yx)- это приведение к типу double

А что такое _CSTD? И что такое _In_? Код CSTD:

#ifdef __cplusplus
 #define _CSTD  ::
 #define _EXTERN_C          extern "C" {
 #define _END_EXTERN_C      }
#else /* ^^^ __cplusplus ^^^ // vvv !__cplusplus vvv */
 #define _CSTD
 #define _EXTERN_C
 #define _END_EXTERN_C
#endif /* __cplusplus */
Answer 1

_In_ - это аннотация SAL

_CSTD - это макрос раскрывающийся в обращение к глобальному пространству имен ::

pow - это вызов реализации pow из С

Answer 2

Какой-то макрос, зависящий от реализации. Смысл в том, что если на вход даётся значение интегрального типа, то вызываем перегрузку для типа double

_In_, скорее всего, макрос или алиас для спецификаторов типа (например, const)

Ну вот, теперь сразу видно что это ::

#define _CSTD  ::
READ ALSO
Как сравнить float и double?

Как сравнить float и double?

Как правильно сравнивать два числа типа float и double? Следующий способ часто говорит, что одинаковые числа различны:

119
property в GNU Compiler Collection

property в GNU Compiler Collection

Есть ли в GCC аналог microsoft'овских property https://msdnmicrosoft

151
Сделать выделение рамки на изображении, Android

Сделать выделение рамки на изображении, Android

У меня задача: есть некое изображение, на котором надо выделить прямоугольную рамку и на выходе получить координаты левой верхней и правой...

147