std::pow
в заголовке <cmath>
имеет следующие перегрузки:
pow(float, float);
pow(float, int);
pow(double, double); // taken over from C
pow(double, int);
pow(long double, long double);
pow(long double, int);
Теперь вы не можете просто сделать
pow(2, N)
с N, являющимся int, потому что он не знает, какую из float
, double
или long double
версии он должен принять, и вы получите ошибку неоднозначности. Всем трем потребуется преобразование из int в число с плавающей запятой, и все три одинаково дороги!
Поэтому обязательно наберите первый аргумент, чтобы он идеально совпадал с одним из этих трех. Я обычно использую double
pow(2.0, N)
Какой-то адвокат дерьмо от меня снова. Я сам часто попадал в эту ловушку, поэтому собираюсь предупредить вас об этом.