![]() |
|
Модераторы: bsa |
![]()
|
|
| mistrmax |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Здравствуйте. Задача: написать программу для нахождения всех Пифагоровых троек от 1 до 500. Делаю так:
Компилятор (MV C++ 2010) сообщает об ошибке выполнения функции pow(). Почитал в документации, и, насколько я понял, x и y [pow(x,y)] должны быть или double или float, в данном случае они int, но ведь происходит преобразование типов, так что... Подскажите в чём проблема пожалуйста. Заранее благодарен. |
|||
|
||||
| rumit7 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: нет Всего: 7 |
в данном случае компилятор не знает во что ему сконвертить int во float или в double, для него эти два преобразования типов равнозначны. Поэтому не знает какую версию pow() вызвать, ту что для float или double? Нужно ему помочь используя явное преобразование типов: pow( (double)i, (double)2). В вашем случае можно проще: pow(i, 2.0), и в данном случае он вызовет pow(double, double). Подробнее об преобразованиях типов (явных, неявных) и выборе соот. перегруженной функции читайте у Липпмана "С++ для начинающих". |
||||
|
|||||
| mistrmax |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Здравствуйте, спасибо за ответ. Сделал как вы и сказали и всё заработало. Спасибо.
|
|||
|
||||
| rumit7 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: нет Всего: 7 |
Знаю, что читать все равно никто не будет, приведу отрывок:
Надеюсь С.Липпман не обидится за рекламу его книги.. |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Так, кстати - конструкция i*i будет выполняться на порядки быстрее, чем pow(i,2)
|
|||
|
||||
| mistrmax |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
xvr, после того, как функция не заработала, так и сделал, но любопытство взяло верх и я решил разобраться в чём дело.
rumit7, тяжёло пишет этот ваш Липпман. Прочитал перегрузку функций у Дейтелов. rumit7, с вашим вариантом всё заработало, но я так ничего и не понял, даже прочитав цитату из книги и пару статей.
Тут понятно, мы используем явное приведение типов.
А что тут? i у нас int, а 2.0 может быть как double, так и float, но тут почему-то компилятор не путается. Обьясните пожалуйста попроще, если можно. Это сообщение отредактировал(а) mistrmax - 15.12.2011, 19:07 |
||||
|
|||||
| rumit7 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: нет Всего: 7 |
Да, для начинающего тяжеловато, хоть книга и называется "С++ для начинающих". Зато все нюансы раскрывает и понимаешь что и почему так! Рекомендую обязательно прочесть, если не сейчас, то чуть позже..
Найдите в 3-ем издании именно тот раздел, отрывок из которого я выше приводил. Ниже я попробую объяснить своими словами, но в книге по любому объясняется по науке. Попробую, только строго не судите, сочинения в школе за меня писала сестра) Итак, по Липпману:
|
||||
|
|||||
| mistrmax |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
rumit7, благодарю за обьяснение! Всё очень доходчиво и понятно. Обязательно почитаю Липпмана.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |