Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2010, 10:40   #1
Rafff
 
Регистрация: 04.04.2010
Сообщений: 7
По умолчанию неправильная работа программки.

Есть задачка. Проблема в том что при изменении значений а и b результат всегда равен 1. и даже если float заменить на double результат все равно равен 1. Подскажите в чём может быть причина.

Код:
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
main()
{
  float a=1000, b=0.0001, c,d,f,k;
  c=pow((a+b),3);
  d=3*a*pow(b,2);
  f=3*pow(a,2)*b;
  k=(c-pow(a,3))/(d+pow(b,3)+f);
  cout<<("Rezultat %f\n",k);
  getch ();
  return 0;
}

Последний раз редактировалось MaTBeu; 05.04.2010 в 11:31.
Rafff вне форума Ответить с цитированием
Старый 05.04.2010, 12:35   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

проверьте пошагово, посмотрите где ошибка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.04.2010, 13:20   #3
profor
 
Регистрация: 04.04.2010
Сообщений: 8
По умолчанию

выходит 1.06667 , а сколько должно получаться?
и вообще лучше писать
Код:
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
main()
{
  float a=1000, b=0.0001, c,d,f,k;
  c=pow((a+b),3);
  d=3.0*a*pow(b,2);
  f=3.0*pow(a,2)*b;
  k=(c-pow(a,3))/(d+pow(b,3)+f);
  cout<<("Rezultat %f\n",k);
  getch ();
  return 0;
}
profor вне форума Ответить с цитированием
Старый 05.04.2010, 13:44   #4
Rafff
 
Регистрация: 04.04.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от profor Посмотреть сообщение
выходит 1.06667 , а сколько должно получаться?
Спасибо за ответ.
Дело в том, что при задании других значений a и b результат получался всегда равным 1. Но щас понял что это сам пример такой.

У меня появился ещё один вопрос.
Почему если написать float - то значение равно 1.06667, а если float изменить на double - то значение равно ровно 1.
Rafff вне форума Ответить с цитированием
Старый 05.04.2010, 13:56   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Вероятно у них точность разная (да и памяти под них разное количество отводится)

На самое главное не это, а то что если у вас у цифры (не переменные!) в выражениях (допустим в выражении 3.0*a*pow(b,2); ) если не указана дробная часть, то число считается целым, и операция будет выполняться как с целым (т.е. дробная часть будет отброшена). Тоже самое будет если в вашем выражении будут переменные целочисленного типа.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 05.04.2010 в 14:10.
ROD вне форума Ответить с цитированием
Старый 05.04.2010, 15:13   #6
profor
 
Регистрация: 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.
profor вне форума Ответить с цитированием
Старый 05.04.2010, 15:16   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Проблема в том что при изменении значений а и b результат всегда равен 1.
Это не проблема, а правильный результат. к должно быть 1 для любых a и b.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Маленькие программки на ассемблере 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