Форум программистов, компьютерный форум CyberForum.ru

Ошибка при выполнении sqrt() - C++

Восстановить пароль Регистрация
 
theadamo86
 Аватар для theadamo86
7 / 7 / 0
Регистрация: 14.09.2013
Сообщений: 168
11.10.2013, 11:01     Ошибка при выполнении sqrt() #1
При попытке выполнить следующий код:
C++
1
double sq = sqrt(2);
компилятор говорит:
task.cpp(18) : error C2668: 'sqrt' : ambiguous call to overloaded function
C:\Program Files\Microsoft Visual C++ Toolkit 2003\include\math.h(626): could be 'long
double sqrt(long double)'
C:\Program Files\Microsoft Visual C++ Toolkit 2003\include\math.h(578): or 'float sqrt
(float)'
C:\Program Files\Microsoft Visual C++ Toolkit 2003\include\math.h(200): or 'double sqrt
(double)'
while trying to match the argument list '(int)'
Как исправить ситуацию?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.10.2013, 11:04     Ошибка при выполнении sqrt() #2
C++
1
double sq = sqrt(2.);
Добавлено через 1 минуту
компилятор не знает какую версию ф-ции sqrt вызвать, 2. явно указывает что вызов double sqrt(double)
theadamo86
 Аватар для theadamo86
7 / 7 / 0
Регистрация: 14.09.2013
Сообщений: 168
11.10.2013, 11:20  [ТС]     Ошибка при выполнении sqrt() #3
А как быть, если в качестве аргумента выступает переменная:
C++
1
2
int S = 2;
int sq = sqrt(S);
Как сказать компилятору использовать int-версию sqrt?
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
11.10.2013, 11:23     Ошибка при выполнении sqrt() #4
Цитата Сообщение от theadamo86 Посмотреть сообщение
А как быть, если в качестве аргумента выступает переменная:
C++
1
2
int S = 2;
int sq = sqrt(S);
Как сказать компилятору использовать int-версию sqrt?
C++
1
2
int S = 2;
double sq = sqrt(S*1.0);
Добавлено через 45 секунд
Результат sqrt не может быть int
calculon
 Аватар для calculon
14 / 14 / 3
Регистрация: 18.07.2012
Сообщений: 79
11.10.2013, 11:24     Ошибка при выполнении sqrt() #5
Может, просто он будет не всегда верным:
C++
1
2
int s = 2; 
int sq = (int)sqrt((double)s);
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
11.10.2013, 11:26     Ошибка при выполнении sqrt() #6
Если нужно, используй приведение типов
C++
1
2
int S = 2;
int sq = (int)sqrt(S*1.0);
Добавлено через 47 секунд
calculon написал раньше
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.10.2013, 11:37     Ошибка при выполнении sqrt() #7
Цитата Сообщение от theadamo86 Посмотреть сообщение
C++
1
2
int S = 2;
 int sq = sqrt(S)
;
, будьте продвинутым человеком

C++
1
2
int S = 2;
 int sq = sqrt(static_cast<double>(S))
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.10.2013, 13:04     Ошибка при выполнении sqrt() #8
Цитата Сообщение от aLarman Посмотреть сообщение
будьте продвинутым человеком
тогда уж используйте и продвинутый компилятор (c++11), и ручные преобразования целых в вещественные не понадобятся.
Additional overloads are provided in this header (<cmath>) for the integral types: These overloads effectively cast x to a double before calculations (defined for T being any integral type).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 13:34     Ошибка при выполнении sqrt()
Еще ссылки по теме:

Компилируется но при выполнении ошибка C++
Ошибка при выполнении программы C++
При выполнении разных операций с MS VS2013, например, при закрытии, иногда появляется ошибка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
aLarman
11.10.2013, 13:34     Ошибка при выполнении sqrt()
  #9

Не по теме:

я имел ввиду не юзать (double) а юзать static_cast<T>() адэкватнее, но это вопрос уже принципов и привычек поэтому думаю не стоит вдаваться в подробности

Yandex
Объявления
11.10.2013, 13:34     Ошибка при выполнении sqrt()
Ответ Создать тему
Опции темы

Текущее время: 00:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru