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)