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

Проблема

01.08.2021, 23:47. Показов 867. Ответов 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
10254 / 5680 / 1262
Регистрация: 12.03.2015
Сообщений: 26,321
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
10254 / 5680 / 1262
Регистрация: 12.03.2015
Сообщений: 26,321
02.08.2021, 09:59
Цитата Сообщение от TRam_ Посмотреть сообщение
в случае double будет не 2.09999990, а около 2.099999999999990 . Принципиально всё не поменяется.
Да неужели? Как нащот накапливающейся ошибки? Она как раз будет меньше на несколько порядков.
0
Злостный нарушитель
 Аватар для Verevkin
10254 / 5680 / 1262
Регистрация: 12.03.2015
Сообщений: 26,321
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
10254 / 5680 / 1262
Регистрация: 12.03.2015
Сообщений: 26,321
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru