Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возведение в степень 
V
    Опции темы
XenOS12
Дата 14.6.2014, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 28.3.2008
Где: Москва

Репутация: нет
Всего: нет



Почему, когда я пытаюсь возвести в квадрат x с типом int, то получается 24, а когда с типом double, то все хорошо и получается 25?

Код

#include <iostream>

using namespace std;

int main()
{
    int x = 5;
    x=exp(2*log(x));
    cout << x;
    return 0;
}

PM MAIL   Вверх
vol4ek
Дата 14.6.2014, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



фяункция exp() в качестве аргумента принимает значение с плавающей точкой

Добавлено через 1 минуту и 29 секунд
возможные перегрузки в C/C++
Код

double exp(      double val );
float exp(       float val );
long double exp( long double val );

PM MAIL ICQ   Вверх
Фантом
Дата 14.6.2014, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Потому что вычисление логарифма и экспоненты производится с машинной точностью. На промежуточных этапах получаются бесконечные десятичные дроби, которые округляются вверх или вниз. Если сделать вариант с double, но перед выводом вставить что-нибудь вроде    cout.precision(20); (чтобы при выводе использовалось 20 цифр), то окажется, что x равен 24.999999999999996447, а 25 - это просто результат округления. Для целого x получается нечто аналогичное, после чего при засовывании этого результата в целочисленную переменную дробная часть просто отбрасывается и остается 24.
PM   Вверх
XenOS12
Дата 14.6.2014, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 28.3.2008
Где: Москва

Репутация: нет
Всего: нет



Фантом, спасибо большое за ответ =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.