Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > три в кубе = 26


Автор: Dr.Wisdom 10.5.2006, 13:12
Вот такая конструкция
Код

  int p = floor((log(u)/log(3)));
  int r = exp(log(3)*p);
  DB_OUT(r << " = " << exp(log(3)*p) << " = " << "exp(log(3)*" << p << ")\n")

выводит следующую строку
Цитата

26 = 27 = exp(log(3)*3)


Ну уж что может быть проще? 

Присвоил значение переменной, а она уменьшаеться на единицу!

На всякий DB_OUT выглядит так

Код

 ofstream con("DEBUG.TXT");
 #define DB_OUT(T) con << T;


Я впринцыпе обйду проблему, но ведь так же не бывает! Я вроди выспавшийся даже.

Добавлено @ 13:16 
ЗЫ. Это я ищу ближайшую степень тройки для числа u
приведенная строка выводитсяь когда в u ввожу число, которое должно быть превращено в 27 (30 например) 


 ! 
chipset
"Аффтар" был отправлен в бан на один день за мат в заголовке темы.
Спасибо.
Chipset.
 

Автор: UnrealMan 10.5.2006, 13:58
Цитата(Dr.Wisdom @  10.5.2006,  13:12 Найти цитируемый пост)
Присвоил значение переменной, а она уменьшаеться на единицу!

Не на единицу, а на дробную часть (которая отбросилась при преобразовании double в int), близкую к единице. Когда вычисляешь выражения с плавающей точкой, набо быть готовым к тому, что в качестве результата вычисления вместо 27 может получиться что-то вроде 26.9999999999999982.
cout при выводе округлит этот результат до 27, а преобразование в int просто отбросит дробную часть, отчего и получишь 26. 

Автор: threef 11.5.2006, 16:50
int r = exp(log(3)*p);
 тут как раз ошибка. В верхней строке округлил, в нижней - постеснялся 

Автор: armageddon 11.5.2006, 17:51
мдя,Dr.Wisdom, извини на наезд, но ты с типами умеешь работать? 

Автор: Dr.Wisdom 12.5.2006, 00:19
теоретически умею.
но я жутко рассеяный.
и у меня инерция сознания после долгой работы исключительно с плавающей токой.

НУ ДА, ДА ЗНАЮ Я! ИДИОТ Я! НУ ЧТО ЕЩЕ МОГУ СКАЗАТЬ?!! 

Автор: Dr.Wisdom 17.5.2006, 13:33
Задал дурацкий вопрос. Невыспался, не заметил, что индексы в массиве не исправил.
Не нашел как удалить сообщение.
Поэтому написао это. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)