Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
10 / 10 / 1
Регистрация: 13.12.2014
Сообщений: 87

Упрощение вида числа

13.12.2014, 20:16. Показов 1589. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые программисты. Прошу помочь с программой C++ в VS2013.
Есть программа (см. ниже). Связана она с выводом таблиц с числами, но это не главное. Она, конечно, работает, но возникла такая проблема. При вводе больших значений чисел, в командной строке в итоге получаем сильный сдвиг таблицы в виду огромной длины значений зависимых переменных. Кто знает, каким образом это можно исправить? Например, выводить вместо 58476529765198 число в таком виде : 5,847653e+13 (я, думаю, понятно). Чтобы таблица не сдвиналась. Так как у меня функция кошинус и никаких ограничений по иксу нет, а кошинус, скажем, например 99, т.е. cosh(99) равен почти 5 в 42 степени.
Заранее спасибо. Очень надеюсь на вашу помощь.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <stdio.h>                  //подключение библиотеки  <stdio.h>               
#include <iostream>                 //подключение библиотеки  <iostream>             
#include <stdlib.h>                 //подключение библиотеки  <stdlib.h>            
#include <conio.h>                  //подключение библиотеки  <conio.h>              
#include <math.h>                   //подключение библиотеки  <math.h> 
 
 
using namespace std;
 
double Factorial(double n)
{
    double f = 1;
    for (int i = 1; i <= n; i++)
    {
        f = f*i;
    }
    return f;
}
 
double myCosh(int n, double x)
{
    double cosh;
    cosh = 1 / Factorial(2 * n);
    cosh = cosh * (pow(x, (2 * n)));
    return cosh;                //возвращающее значение (спасибо, кэп)
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    double m, xMin, xMax, dx, eps, MyF, Cosh, xIdeal;
    double pi = 3.1415926535;
    cout << "Введите eps=";
    cin >> eps;
    while ((eps <= 0) || (eps >= 1))
    {
        cout << "\n Ошибка! 0 < eps < 1. Повторитие ввод \n eps = ";
        cin >> eps;
    }
    cout << "\n Введите минимальную границу промежутка вычисления. \n X_min = ";      //минимальная граница промежутка
    cin >> xMin;
    cout << "\n Введите максимальную границу промежутка вычисления. \n X_max = ";      //максимальная граница промежутка
    cin >> xMax;
    cout << "\n Введите шаг. \n dx = ";                            
    cin >> dx;
    while (((dx <= 0) && ((xMax - xMin) > 0)) || ((dx >= 0) && ((xMax - xMin) < 0)))    
    {
        cout << "\n Ошибка! Повторитие ввод. \n dx = ";
        cin >> dx;
    }
        m = (xMax - xMin) / dx;
        if (m>0)
        {
            cout << "\nТаблица1\n";
            cout << "------------------------------------------------------------------------\n";
            cout << "|             |                   |                  |                 |\n";
            cout << "|      x      |   MyFunction(x)   |   Function(x)    |       Sigma     |\n";
            cout << "|_____________|___________________|__________________|_________________|\n";
 
            for (double x = xMin, n = 1; n <= floor(m) + 1; x = x + dx, n++)
            {
                double b, p = 1;
                MyF = 0;
                for (double n = 0; fabs(p) >= eps; n++)
                {
                    Cosh = cosh(x);
                    MyF = MyF + myCosh(n, x);
                    p = myCosh(n + 1, x) - myCosh(n, x);
                }
                b = sqrt(abs(pow(MyF, 2) - pow(Cosh, 2)));
                printf("| %10.7f  |%14.7f     |%14.7f    |%14.7f   |\n", x, MyF, Cosh, b);
                 
            }                                                                             
            cout << "|----------------------------------------------------------------------|\n";
        }
        else cout << "Не корректное значение \n ";
    cout << "Введите xIdeal=";
    cin >> xIdeal;
    cout << "----------------------------------------------------------------------\n";
    cout << "|           |                   |                  |                 |\n";
    cout << "|     e     |   MyFunction(x)   |   Function(x)    |       Sigma     |\n";
    cout << "|___________|___________________|__________________|_________________|\n";
 
    for (eps = 0.1; eps >= pow(10, -7); eps = eps / 10)
    {
        double b, p = 1;
        MyF = 0;
        for (double i = 0; fabs(p) >= eps; i++)
        {
            Cosh = cosh(xIdeal);
            MyF = MyF + myCosh(i, xIdeal);
            p = myCosh(i + 1, xIdeal) - myCosh(i, xIdeal);
        }
        b = sqrt(abs(pow(MyF, 2) - pow(Cosh, 2)));
        printf("| %8.7f |%15.7f    |%15.7f   |%15.7f  |\n", eps, MyF, Cosh, b);
 
    }                                                                  
    cout << "|--------------------------------------------------------------------|\n";
 
    system("PAUSE");
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.12.2014, 20:16
Ответы с готовыми решениями:

Деление числа двоичного вида
Помогите с заданием. Число х вводится в двоичном виде, максимальная длина числа 64 разряда, затем вводится число y. Определить ли нацело...

Отображение полного вида числа
Всем доброго времени суток, есть такая вещь в консольных приложениях С++, что на выводе отображается число польностью, только если в нем до...

Найти все простые числа вида n^(n) + 1, меньше за 10^19
Мне надо создать программу. Задание вот такое: Найти все простые числа вида nn + 1, меншье за 1019.

5
Модератор
Эксперт С++
 Аватар для zss
13780 / 10973 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
13.12.2014, 20:53
Лучший ответ Сообщение было отмечено Michael_Nexus как решение

Решение

Используйте в формате %14.7g вместо %14.7f
тогда, если число влезет в 14 позиций с 7 значащими цифрами, то напечатается в обычном формате,
не влезет - в экспоненциальном.
1
10 / 10 / 1
Регистрация: 13.12.2014
Сообщений: 87
13.12.2014, 21:47  [ТС]
zss, мысленно пожимаю Вам руку! Спасибо большое, помогло.

Добавлено через 25 минут
zss, и еще такой вопрос. Скажите, с чем может быть связан вывод бесконечности (1.#INF) на месте второй переменной (MyF)? Если проследить, то примерно после значения 8,47*10^27 выводится бесконечность, т.е. он тупо отказывается вывести точное значение, считая его бесконечно большим, тогда как переменная Сosh ведет себя нормально (хотя после 330 степени тоже выводится бесконечность, но тут простительно).
0
Модератор
Эксперт С++
 Аватар для zss
13780 / 10973 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
13.12.2014, 23:27
10^27 это больше, чем float.
Советую везде перейти на double
(и не забудьте в форматах вывода заменить f на lf, g на lg ).
0
10 / 10 / 1
Регистрация: 13.12.2014
Сообщений: 87
13.12.2014, 23:36  [ТС]
zss, в том то и дело, что у меня теперь все в double/long double. Попробовал сейчас заменить g на lg - результат тот же. Просто не понимаю, что не так. Проблема именно не в гиперболической функции (cosh(x)), а в заданном ряде (с факториалом и степенями).
0
Модератор
Эксперт С++
 Аватар для zss
13780 / 10973 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
13.12.2014, 23:47
Странная у Вас функция myCosh.
Посмотрите, как правильно ее оформить:
Большая коллекция решенных задач
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2014, 23:47
Помогаю со студенческими работами здесь

Как избавиться от экспоненциального вида при выводе числа
Вот программа, которая вычисляет факториалы чисел от 0 до 20. Факториал для чисел от 10 до 20 представляется в экспоненциальной форме. Как...

Перевод числа из десятичного вида в двоичный. Что неправильно в коде?
#include &lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;RUS&quot;); cout &lt;&lt; &quot;эта программа...

Вывести все числа, которые составлены из цифры только одного вида
Вывести все числа, которые составлены из цифры только одного вида (например, 1111, 222, 9). Пример. Вход: 3 908 33 72 Выход: 33.

Написать программу, которая находит и выводит на печать все четырехзначные числа вида abcd
Написать программу, которая находит и выводит на печать все четырехзначные числа вида abcd, для которых выполняется: условие: а, b, с, d –...

ООП. Перевести числа из 10-чного вида в двоичный, сосчитать, и результат вывести и в двоичном, и в десятичном
Следует написать ООП программу, которая принимает на вход арифм.выражение(знаки + или -). программа должна перевести числа из 10-чного вида...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru