Задача: Сравнить скорость сходимости (число слагаемых для заданной точности [latex]e[/latex] следующих разложений числа [latex]\pi[/latex]
1. [latex]\pi=4\left(1-\frac {1}{3}+\frac {1}{5}-\frac {1}{7}+\frac {1}{9} -… \right)[/latex]
2. [latex]\pi=3+4\left(\frac {1}{2\cdot 3\cdot 4}-\frac {1}{4\cdot 5\cdot 6}+\frac {1}{6\cdot 7\cdot 8\cdot } -…\right)[/latex]
3. [latex]\pi=\sqrt {6\left(1+\frac {1}{ {2}^{2} } +\frac {1}{ {3}^{2}}+\frac {1}{ {4}^{2}}+… \right) }[/latex]
Число слагаемых (е) | Вариант 1 | Вариант 2 | Вариант 3 | Комментарий |
1 | 0.858407 | 0.025074 | 0.692103 | Работает |
2 | 0.474926 | 0.00825932 | 0.40298 | Работает |
3 | 0.325074 | 0.00825932 | 0.283855 | Работает |
10 | 0.099753 | 0.000185935 | 0.092231 | Работает |
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 |
#include <iostream> #include <cmath> using namespace std; struct bolshoe() double minimum( double a, double b ) { // почему-то min и max не хотели работать return a < b ? a : b; // на идеоне, я не стал разбираться. } double maximum( double a, double b ) { return a > b ? a : b; } int main() { double vara = 0, varb = 0, varc = 0, difa = 0, difb = 0, difc = 0; // dif - difference int e; // e - кол-во слагаемых scanf("%d", &e); for(int i = 1, sign; i <= e; i++){ // складываем слагаемые sign = i % 2? 1:-1; vara += 1 / ((i * 2.0) - 1) * sign; varb += 1 / ((i * 2.0) * ((i * 2.0) + 1) * ((i * 2.0) + 2)) * sign; varc += 1 / pow(i, 2); } vara = 4 * vara; varb = 3 + (4 * varb); varc = sqrt(6 * varc); // строка внизу считает погрешность difa = fabs(M_PI - vara); difb = fabs(M_PI - varb); difc = fabs(M_PI - varc); printf("%lg - самая маленькая погрешность\n", minimum(difa, minimum(difb, difc))); // вывод printf("%lg - самая большая погрешность\n", maximum(difa, maximum(difb, difc))); printf("1 = %lg\n2 = %lg\n3 = %lg", difa, difb, difc); return 0; } |
Первым делом я исчисляю разложения с заданным количеством слагаемых. Затем я присваиваю нужные им значения (по формуле), а затем с помощью абсолютного значения числа считаю погрешность.
Вывод: Второе разложение является самым точным.