|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.04.2010, 10:40 | #1 |
Регистрация: 04.04.2010
Сообщений: 7
|
неправильная работа программки.
Есть задачка. Проблема в том что при изменении значений а и b результат всегда равен 1. и даже если float заменить на double результат все равно равен 1. Подскажите в чём может быть причина.
Код:
Последний раз редактировалось MaTBeu; 05.04.2010 в 11:31. |
05.04.2010, 12:35 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
проверьте пошагово, посмотрите где ошибка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
05.04.2010, 13:20 | #3 |
Регистрация: 04.04.2010
Сообщений: 8
|
выходит 1.06667 , а сколько должно получаться?
и вообще лучше писать Код:
|
05.04.2010, 13:44 | #4 |
Регистрация: 04.04.2010
Сообщений: 7
|
Спасибо за ответ.
Дело в том, что при задании других значений a и b результат получался всегда равным 1. Но щас понял что это сам пример такой. У меня появился ещё один вопрос. Почему если написать float - то значение равно 1.06667, а если float изменить на double - то значение равно ровно 1. |
05.04.2010, 13:56 | #5 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Вероятно у них точность разная (да и памяти под них разное количество отводится)
На самое главное не это, а то что если у вас у цифры (не переменные!) в выражениях (допустим в выражении 3.0*a*pow(b,2); ) если не указана дробная часть, то число считается целым, и операция будет выполняться как с целым (т.е. дробная часть будет отброшена). Тоже самое будет если в вашем выражении будут переменные целочисленного типа.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс Последний раз редактировалось ROD; 05.04.2010 в 14:10. |
05.04.2010, 15:13 | #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. |
05.04.2010, 15:16 | #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 |