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


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

Код

#include <iostream>

using namespace std;

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

Автор: vol4ek 14.6.2014, 11:24
фяункция exp() в качестве аргумента принимает значение с плавающей точкой

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

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

Автор: Фантом 14.6.2014, 11:54
Потому что вычисление логарифма и экспоненты производится с машинной точностью. На промежуточных этапах получаются бесконечные десятичные дроби, которые округляются вверх или вниз. Если сделать вариант с double, но перед выводом вставить что-нибудь вроде    cout.precision(20); (чтобы при выводе использовалось 20 цифр), то окажется, что x равен 24.999999999999996447, а 25 - это просто результат округления. Для целого x получается нечто аналогичное, после чего при засовывании этого результата в целочисленную переменную дробная часть просто отбрасывается и остается 24.

Автор: XenOS12 14.6.2014, 13:16
Фантом, спасибо большое за ответ =)

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