| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Возведение в степень |
| Автор: XenOS12 14.6.2014, 11:13 | ||
Почему, когда я пытаюсь возвести в квадрат x с типом int, то получается 24, а когда с типом double, то все хорошо и получается 25?
|
| Автор: vol4ek 14.6.2014, 11:24 | ||
| фяункция exp() в качестве аргумента принимает значение с плавающей точкой Добавлено через 1 минуту и 29 секунд возможные перегрузки в C/C++
|
| Автор: Фантом 14.6.2014, 11:54 |
| Потому что вычисление логарифма и экспоненты производится с машинной точностью. На промежуточных этапах получаются бесконечные десятичные дроби, которые округляются вверх или вниз. Если сделать вариант с double, но перед выводом вставить что-нибудь вроде cout.precision(20); (чтобы при выводе использовалось 20 цифр), то окажется, что x равен 24.999999999999996447, а 25 - это просто результат округления. Для целого x получается нечто аналогичное, после чего при засовывании этого результата в целочисленную переменную дробная часть просто отбрасывается и остается 24. |
| Автор: XenOS12 14.6.2014, 13:16 |
| Фантом, спасибо большое за ответ =) |