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

Нахождение погрешности при вычислении ln

21.02.2025, 09:30. Показов 2517. Ответов 8

Студворк — интернет-сервис помощи студентам
У меня есть код на с++ для нахождения погрешности при вычислении ln.
Объясните пожалуйста вот эту часть
error_ = (Result[i - 1]) * GM(2 * (2 * i - 1));
Привидите какие нибудь формулы для доказательства.
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
#include <cmath>
#include <iomanip>
#include <vector>
 
const double U = pow(2.0, -53);
 
 
 
double z = 1.0;
const double x = (z - 1.0) / (z + 1.0);
const int N = 100;
 
 
double GM(int j)
{
    return (U * j) / (1 - j * U);
}
 
 
 
std::vector<double> Array(std::vector<double>& ep)
{
    std::vector<double> Result;
 
    
 
    double x_ = x;
 
    double error_ = 0.0;
 
    for (int i = 1; i < N + 1; ++i)
    {
 
        for (int k = 1; k < 2 * i - 1; ++k)
        {
            x_ *= x;
        }
 
        Result.push_back(x_ / (2 * i - 1));
 
        error_ = (Result[i - 1]) * GM(2 * (2 * i - 1));
 
        ep.push_back(error_);
 
        x_ = x;
    }
 
    return Result;
}
double SumArray(std::vector<double> arr, std::vector<double>& ep, double& error2, std::vector<double> sum_error3, double& error1)
{
    if (arr.size() > 1)
    {
        if (arr.size() % 2 != 0)
        {
            arr.push_back(0.0);
 
            ep.push_back(0.0);
        }
 
        std::vector<double> res; 
 
        std::vector<double> eps; 
 
        std::vector<double> error_sum;
 
        for (int i = 1; i < arr.size(); i += 2)
        {
            res.push_back(arr[i] + arr[i - 1]);
 
            if (arr[i] != 0.0)
            {
                eps.push_back((ep[i] + ep[i - 1]) / (1 - 2 * U));
 
                error_sum.push_back(res.back() / (1 - 2 * U));
 
            }
            else {
                eps.push_back(ep[i - 1]);
 
                error_sum.push_back(res.back());
            }
 
        }
 
 
        return SumArray(res, eps, error2, error_sum, error1);
    }
    else {
 
        error1 = ep[0];
        error2 = sum_error3[0];
        return arr[0];
    }
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    std::vector<double> ep;
 
    std::vector<double> sum_error3;
 
    std::cout.precision(20);
    std::vector<double> res = Array(ep);
 
 
    double error1 = 0.0;
 
 
 
 
 
    double error2 = 0.0; 
    double error3 = 0.0;
    double sum = 0.0;
    sum = SumArray(res, ep, error2, sum_error3, error1);
    std::cout << 10 * sum << "\n";
    error3 = (x / (1 - x * x));
 
 
 
 
    error3 = error3 / (2 * N + 1) * U;
    
    std::cout << error2 << " Ошибка суммирования\n";
    std::cout << error1 << " Погрешность\n";
   
    std::cout << error3 << " Ошибка отбрасывания остаточного члена ряда\n";
    std::cout << error1 + error2 + error3 << " Суммарная ошибка округления\n";
 
 
    return 0;
};
Добавлено через 4 минуты
https://www.cyberforum.ru/cgi-bin/latex.cgi?RN(\frac{{x}^{p}}{x})=\frac{y}{{1+\delta }^{2p}}
Вроде используется вот эта формула
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2025, 09:30
Ответы с готовыми решениями:

Вычисления в цикле, нахождение ежедневного прироста
Здравствуйте, при решении задачи, столкнулся с проблемой задания цикла для нахождения ежедневного прироста и выделения в последующем...

Ввод элементов массива с клавиатуры, вычисление суммы по формуле, нахождение максимальной суммы
Помогите дополнить код. Нужно, чтоб элементы массива вводились с клавиатуры. Выводилось на экран все суммы, которые вычисляются по формуле,...

Вычисление суммы ряда с заданной погрешностью
народ помогите решить задачку: arctanx=x-x^3/3+x^5/5-...+(-1^n)*(x^(2n+1)/(2n+1))... Численно убедиться в справедливости равенства,...

8
Злостный нарушитель
 Аватар для Verevkin
10860 / 5805 / 1282
Регистрация: 12.03.2015
Сообщений: 26,811
21.02.2025, 09:54
Цитата Сообщение от Rifatzak Посмотреть сообщение
У меня есть код на с++ для нахождения погрешности при вычислении ln.
А где ты его взял?
И ваще, где оригинал ТЗ?
0
0 / 0 / 0
Регистрация: 30.09.2022
Сообщений: 13
21.02.2025, 09:57  [ТС]
Преподователь дал код и сказал объяснить
0
Злостный нарушитель
 Аватар для Verevkin
10860 / 5805 / 1282
Регистрация: 12.03.2015
Сообщений: 26,811
21.02.2025, 10:01
Цитата Сообщение от Rifatzak Посмотреть сообщение
Преподователь дал код и сказал объяснить
Как нам с ним связаться? Хочу позадавать наводящие вопросы.
0
86 / 60 / 12
Регистрация: 06.06.2013
Сообщений: 216
21.02.2025, 12:52
Объясните пожалуйста вот эту часть
Реку́рсия - см. Рекурсия.
Только какая-то странная. С телефона тяжело представить, что тут происходит, но такое впечатление, что что-то здесь очень сильно усложнили. По крайней мере страшно смотреть на все эти вектора, передаваемые копированием, да еще и рекурсивно. Вечером доберусь до дома - может скажу точнее, а то сам уже забыл все эти разложения в ряды.

Не по теме:

Когда вижу названия переменных и функций с большой буквы, хочется психануть и кого-нибудь стукнуть. Особенно - когда функцию называют как какой-то макрос. Простите. Вообще перед тем, как давать задание разобраться в своем коде, можно было бы позаботиться сделать этот код более читаемым. Как минимум - не называть глобальные переменные одной буквой.

0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
21.02.2025, 14:03
Цитата Сообщение от Anvis Посмотреть сообщение
Реку́рсия - см. Рекурсия.
Вплотную не вижу рекурсии. Слепой наверное, старенький я.

Добавлено через 1 минуту
Рекурсия только в функции SumArray, а не там где просят разъяснить.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,296
21.02.2025, 20:49
Цитата Сообщение от Rifatzak Посмотреть сообщение
Объясните пожалуйста вот эту часть
error_ = (Result[i - 1]) * GM(2 * (2 * i - 1));
Привидите какие нибудь формулы для доказательства.
Какое отношение математические доказательства имеют к С++? Почему вы это запостили в форум по С++?
0
86 / 60 / 12
Регистрация: 06.06.2013
Сообщений: 216
22.02.2025, 00:10
Цитата Сообщение от SmallEvil Посмотреть сообщение
Вплотную не вижу рекурсии. Слепой наверное, старенький я.
Да я сам ее раза два терял, пока читал код с телефона. Но с удалением сообщений тут проблема, пришлось выкручиваться. Согласен, что не там, но при первом прочтении показалось, что она близко к тому месту, про которое спрашивали.

Так или иначе, чтоб не быть балаболом, постарался вникнуть во все это дерьмо, а заодно и привести в порядок функции.

Поскольку функция Array() не только возвращала новый вектор, но и попутно модифицировала другой, передаваемый в качестве аргумента (причем пустой ), я все же разбил ее на две функции. Возможно, ваш препод таким образом пытался вам показать, что при передаче вектора в функцию по ссылке его можно модифицировать, но в подавляющем большинстве случаев это выглядит как некоторый говнокод. Возможно, он у вас крутой математик, но на С++ так не пишут. Еще, возможно, он таким образом хотел заполнить оба вектора за один проход ради экономии ресурсов, но внутри его цикла так много лишних повторяющихся операций, что - вряд ли. У меня тоже есть еще куда оптимизировать, но решил оставить так, для лучшей читаемости.

То, что он у себя называет Result - элементы какого-то ряда Макларена. Например, половинки от ln((1+x)/(1-x)). Что он дальше с ней делает - надо смотреть в контексте функции Array(), но туда заглядывайте как-нибудь без меня. Что такое ep и каким методом он определяет этот error_ - мне тоже не очень понятно, нужно смотреть в соответствующих разделах матана. И наверное, сперва надо понять, из каких соображений он выбрал U = pow(2.0, -53);

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
std::vector<double> getResultArray(double _x, double _n)   
{
    std::vector<double> result;
    result.reserve(_n);
 
    double mult_x = _x;
    int odd = 1;
    for(int i=0; i<_n; ++i) {
        result.push_back(mult_x / odd); //заполняем ряд: x ; (x^3)/3 ; (x^5)/5 ; (x^7)/7 ... (x^(2n-1)) / (2n-1)
        odd += 2;
        mult_x *= _x * _x;
    }
    return result;
}
 
 
std::vector<double> getEpArray(const std::vector<double> &_arr, double _u) 
{
    int n = _arr.size();
    std::vector<double> ep;
    ep.reserve(n);
 
    int odd_2 = 2;      //2, 6, 10, 14 ... 2(2n-1)
    for(double val : _arr) {
        double odd_2_u = _u * odd_2;
        ep.push_back(val * odd_2_u / (1 - odd_2_u));  
        odd_2 += 4;
    }
    return ep;
}
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,931
Записей в блоге: 13
22.02.2025, 16:07
Оценить отброшенную часть бесконечного ряда можно так
Ошибки округления при вычислении логарифма

Не смотрел, по какой формуле вычисляете логарифм - их два варианта - по образу и подобию подгоните под свой случай.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2025, 16:07
Помогаю со студенческими работами здесь

вычисление погрешности - циклы.
Задание во вложении. мой код приложен. не правильно работает ряд, точнее его накопление, на сколько я понимаю - поправте что ни так.. ...

Вычисление суммы ряда c учетом погрешности
Входными данными программы, вводимыми с консоли, являются значение аргумента x и параметр p, характеризующий точность вычисления ряда. ...

Накопление погрешности вычислений с double
Добрый день, столкнулся с такой проблемой: при нескольких (около 30) последовательных умножениях матриц базисов накапливается погрешность...

Вычислить сумму ряда так, чтобы погрешность вычисления суммы не превышала заданной относительной погрешности
Вычислить сумму ряда так, чтобы погрешность вычисления суммы не превышала заданной относительной погрешности ε . Для этого можно проверять...

Функция нахождения определителя матрицы с вычислением времени
Ребят, помогите доделать программу. Программа ищет определитель матрицы, данные заполняются рандомно либо от руки. Надо сделать еще функцию...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
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