![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Регистрация: 04.04.2010
Сообщений: 7
|
![]()
Есть задачка. Проблема в том что при изменении значений а и b результат всегда равен 1. и даже если float заменить на double результат все равно равен 1. Подскажите в чём может быть причина.
Код:
Последний раз редактировалось MaTBeu; 05.04.2010 в 11:31. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
проверьте пошагово, посмотрите где ошибка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 04.04.2010
Сообщений: 8
|
![]()
выходит 1.06667 , а сколько должно получаться?
и вообще лучше писать Код:
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 04.04.2010
Сообщений: 7
|
![]()
Спасибо за ответ.
Дело в том, что при задании других значений a и b результат получался всегда равным 1. Но щас понял что это сам пример такой. У меня появился ещё один вопрос. Почему если написать float - то значение равно 1.06667, а если float изменить на double - то значение равно ровно 1. |
![]() |
![]() |
![]() |
#5 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
![]()
Вероятно у них точность разная (да и памяти под них разное количество отводится)
На самое главное не это, а то что если у вас у цифры (не переменные!) в выражениях (допустим в выражении 3.0*a*pow(b,2); ) если не указана дробная часть, то число считается целым, и операция будет выполняться как с целым (т.е. дробная часть будет отброшена). Тоже самое будет если в вашем выражении будут переменные целочисленного типа.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс Последний раз редактировалось ROD; 05.04.2010 в 14:10. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 04.04.2010
Сообщений: 8
|
![]()
проверь на первой же c=pow((a+b),3);
если float то результат 1Е +09, а если double то 1000 000 300.000 03 числа не маленькие и может быть переполнение? наверно лучше используй long double powl(long double x, long double y); кст, pow() возвращает double. Нет смысла использовать float. |
![]() |
![]() |
![]() |
#7 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Маленькие программки на ассемблере | gessi | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 23.03.2010 11:04 |
Неправильная хеш функция.(Java) | _Studentka_ | Помощь студентам | 0 | 09.12.2009 22:54 |
Неправильная работа switch в while | konstantinopol | Общие вопросы C/C++ | 3 | 24.01.2009 03:51 |
Неправильная ссылка на скачивание | nickki | О форуме и сайтах клуба | 2 | 01.04.2007 12:10 |