Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336

Округление double

23.11.2017, 20:16. Показов 3093. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Происходит округление double. На каком этапе это происходит на данный момент я не могу проверить, по той причине что нет отладчика... (долгая история), а на глаз я не вижу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double Exponential(int left, int right, int max) 
{
    double exponential = 0.0f;
    int factorial;
    
    for (; (left < right) && (left <= max); left++)
    {
        factorial = 1;
        for (int k = 2; k <= left; k++)
        {
            factorial *= k;
        }
        
        exponential += 1/factorial;
    }
    
    return exponential;
}
Функция считает сумму 1/k! на промежутке.

Например: [0, 3] функция возвращает не 1.66666666... а 1.0000000...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.11.2017, 20:16
Ответы с готовыми решениями:

Округление double
Короче ввожу число 1.05 в Debug показывает его, как 1.004999999999999999995663191310058 вот как эту чушь убрать, у меня задача из-за...

Округление Double
Использую Double, возникают при тонких расчетах проблемы с округлением. Какие есть стандартные способы решения? :)

Убрать округление double
Доброго времени суток! Недавно начав самостоятельно изучать С++, я пыталась выполнить лабораторную работу по созданию программы для...

12
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
23.11.2017, 20:24
Единицу в числителе вещественной сделай.
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
23.11.2017, 20:24
C++
1
exponential += 1.0/factorial;
а тут убрать f
C++
1
double exponential = 0.0f;
f - для типа float, для double надо просто 0.0
1
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
23.11.2017, 20:28  [ТС]
Спасибо, но все равно не хочет... мб я не правильно вывожу тип double?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
double Exponential(int left, int right, int max) 
{
    double exponential = 0.0;
    double one = 1.0;
    int factorial;
    
    for (; (left < right) && (left <= max); left++)
    {
        factorial = 1;
        for (int k = 2; k <= left; k++)
        {
            factorial *= k;
        }
        
        exponential += (double)(one/((double)factorial));
    }
    printf("[kek] %f\n", exponential);
    return exponential;
}
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
23.11.2017, 20:40
darksector, double выводится через %lf. Если вы не хотите мороки с этим, используйте cout
1
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
23.11.2017, 20:46  [ТС]
Цитата Сообщение от DobroAlex Посмотреть сообщение
darksector, double выводится через %lf. Если вы не хотите мороки с этим, используйте cout
Эффекта нет, тоже самое 1.00000...
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
23.11.2017, 20:50
darksector, маловероятно, но попробуйте сделать factorial тоже double. Сейчас попробую написать сам
0
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
23.11.2017, 20:52  [ТС]
Доп. информация: сижу на Ubuntu 16.0.4 и работаю через MPI.
Компилирую через терминал, запускаю через терминал...
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
23.11.2017, 20:53
Лучший ответ Сообщение было отмечено darksector как решение

Решение

darksector , попробуйте gdb в качестве отладчика
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
23.11.2017, 21:02
Цитата Сообщение от DobroAlex Посмотреть сообщение
double выводится через %lf
Нет.

Может, просто алгоритм кривой? Вывод на всех итерациях сделай.
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
23.11.2017, 21:08
nmcf,

Не по теме:

в чистом С, которым пользуется ТС, можно начиная с С99, если комилирует не g++ https://stackoverflow.com/ques... -in-printf

0
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
23.11.2017, 21:08  [ТС]
Попробовал на www.onlinegdb.com там все отлично, не знаю почему у меня на выходе все равно целые числа. Думаю компилятор так шалит...
0
23.11.2017, 21:13

Не по теме:

DobroAlex, может, какие-то компиляторы и пропускают такое, но для double просто f.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2017, 21:13
Помогаю со студенческими работами здесь

Округление Long double.
Нужно округлить число типа long double в меньшую сторону т.е. просто обнулить всю дробную часть, но при этом надо сохранить эту самую...

Форматирование вывода и округление double
Доброго времени суток. Я много подобных тем полистал. Но не нашел ответа. Мне нужно написать функцию, которая бы получала double число,...

double округление с точность до N знаков
Добрый день, помогите пожалуста какую надо использовать функцию чтобы была возможность округлить значение числа double с точностью до N...

Округление числа double до десятых, до сотых
Приветствую всех, double y=3.1415; нужно округлить y до десятых и сотых, записать в переменные соответственно. т.е. получить 0.1 и...

printf. Округление чисел типа double
Пытаюсь писать программу для округления чисел типа double. // okruglenie double.cpp: определяет точку входа для консольного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru