Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.08.2021
Сообщений: 1

Проблема

01.08.2021, 23:47. Показов 905. Ответов 7

Студворк — интернет-сервис помощи студентам
Решил написать программу и создал массив чисел с плавающей запятой, но при записи туда 2.1 программа записывает ее как 2.09999990 и из-за этого расчеты выходят неверные. В ручную пересчитал 5 итерацию должно выйти 110 а выходит 109.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
 
using namespace std;
void main()
{
    setlocale(LC_ALL, "ru");
    int a = 0;
    //размер массивово
    const int size = 7;
    //процент дохода
    float percent[size] = { 101, 102, 110, 120, 140, 210, 300};
    //процент того что вклад будет удачным
    int probability[size] = { 99, 98, 90, 80, 70, 50, 35 };
    //доход
    int income[size];
    //колличество иттераций
    int iteration[size];
    //риск
    int discharge[size];
    for (int i = 0; i < size; i++)
    {
        //цикл прибавляет в риск процент того что вклад будет удачным если риск меньше 100 то программа вычитает из дохода минимальный вклад в размере 100 если же больше то она прибавляет 100 помноженное на процент дохода + 1 и отнимает от риска 100 цикл завершается когда риск равен 0 
        income[i] = 0;
        iteration[i] = 0;
        discharge[i] = 0;
        do 
        {
            discharge[i] += probability[i];
            if (discharge[i] / 100 > 0)
            {
                discharge[i] -= 100;
                income[i] += 100 * (percent[i]/100);
            }
            else 
            {
                income[i] -= 100;
            }
            iteration[i] += 1;
        } while ((discharge[i] % 100 != 0));
        cout << "Вклад " << i + 1 << endl << "Доход:" << income[i] << endl << "Колличство циклов:" << iteration[i] << endl << "Средний доход:" << income[i] / iteration[i] << endl << "============================" << endl;
    }
    cin.get();
}
Если кто-то сталкивался с этим или знает что делать подскажите пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.08.2021, 23:47
Ответы с готовыми решениями:

Проблема с VS
Привет, поставил себе Visual Studio 2005 релиз, все до этого работало нормально. Сам я работаю в среде БлудШед Dev Cpp. Во время...

Проблема с сортировками
Здравствуйте! Недавно попалась задача со следующим содержанием: &quot;Напишите программу, которая сортирует натуральные числа в массиве по...

Проблема с наследованием
Есть задание: Разработать три класса, которые следует связать между собой, используя наследование: 1. класс Product, который имеет три...

7
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
02.08.2021, 08:21
Цитата Сообщение от arpapa Посмотреть сообщение
Если кто-то сталкивался с этим или знает что делать подскажите пожалуйста.
C этим сталкивались все.
Выкинь float и больше никогда его не используй. Замени на double.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
02.08.2021, 09:52
Verevkin, в случае double будет не 2.09999990, а около 2.099999999999990 . Принципиально всё не поменяется.
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
02.08.2021, 09:59
Цитата Сообщение от TRam_ Посмотреть сообщение
в случае double будет не 2.09999990, а около 2.099999999999990 . Принципиально всё не поменяется.
Да неужели? Как нащот накапливающейся ошибки? Она как раз будет меньше на несколько порядков.
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
02.08.2021, 10:05
Цитата Сообщение от TRam_ Посмотреть сообщение
Принципиально всё не поменяется.
Мне было не влом проверить.
Цитата Сообщение от arpapa Посмотреть сообщение
В ручную пересчитал 5 итерацию должно выйти 110 а выходит 109.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
02.08.2021, 10:06
Verevkin, мне кажется что тут ошибка из-за отбрасывания дробной части в выражении income[i] += 100 * (percent[i]/100);, т.к. int её накапливать не может.
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
02.08.2021, 10:07
Цитата Сообщение от TRam_ Посмотреть сообщение
мне кажется что тут ошибка из-за отбрасывания дробной части в выражении income[i] += 100 * (percent[i]/100);, т.к. int её накапливать не может.
Ты чо, даже после моих пруфов утверждаешь, что я не прав?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
02.08.2021, 12:19
Verevkin, прав. Моё предположение неверно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.08.2021, 12:19
Помогаю со студенческими работами здесь

Проблема с realloc
Добрый вечер! Срабатывает точка останова в строчке 17. Никак не могу найти ошибку. Что ему не нравится? Подскажите, пожалуйста, в чём...

Проблема с классом
Доброе времени суток...у меня проблема в создании класса - динамического массива! проблема в изминении определённого элемента и вывода на...

Проблема в переносе байт
В программе нужно произвести перенос байтов из 8 байтного вещественного числа в массив Добавлено через 2 минуты Из double в массив...

проблема с зависимостю класов
такая проблема: есть класы A и B A { B b = new B(); } B - поле класа A как сделать зависимость между класами такую,

Не пойму в чем проблема!
Создать иерархию типов, описывающую работника и отца-семейства, и работника-отца семейства. Классы должны конструкторы, включая конструктор...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru