Visual Studio не позволяет мне использовать sqrt или floor, неоднозначный вызов перегруженной функции
мне нужно позвонить
long long a = sqrt(n/2);
и a
и n
are long long
но он не позволит мне компилировать, потому что он говорит, что я использую sqrt()
неоднозначный вызов. Я не понимаю, как здесь вообще может быть двусмысленно. Как мне решить эту проблему? У меня такая же проблема с floor()
.
мой включает в себя
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
4 ответов
есть несколько перегрузок sqrt()
и floor()
, нет" лучшего соответствия " для вызова sqrt(long long)
согласно правилам разрешения перегрузки. Просто приведите аргумент к соответствующему типу - т. е.
long long a = sqrt(static_cast<double>(n/2));
на sqrt
функции ожидает float
, a double
или long double
:
long long a = sqrt(n * 0.5);
вы можете потерять некоторые точность преобразование long long
до double
, но значение будет очень близко.
согласно справке
http://www.cplusplus.com/reference/clibrary/cmath/sqrt/
Я бы предложил преобразовать в двойной первый. Нет перегрузки sqrt принимает целочисленное значение
интегральный параметр всегда может привести к "реальному" значению (float, double, long double)