Форум программистов, компьютерный форум CyberForum.ru

Обосновать решение уравнения - C++

Восстановить пароль Регистрация
 
samarcs
 Аватар для samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
10.06.2013, 17:39     Обосновать решение уравнения #1
Имеется формула http://www.cyberforum.ru/cgi-bin/latex.cgi?1-\frac{1}{2^2}+\frac{1}{3^2}-\frac{1}{4^2}+\frac{1}{5^2}-\frac{1}{6^2}+......\pm \frac{1}{n^2}.
Есть код:
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
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
int main()
{
    double s = 0;
    int sign = 1;
    for(int i = 1; i < 25; i++)
    {
        s += sign / static_cast<float>(i * i);
        sign = -sign;
        cout << "s = " << setprecision(70) << s << endl;
    }
    cout << "total s = " << setprecision(70) << s << endl;
    system("pause");
    return 0;
}
Результат:
s = 1
s = 0.75
s = 0.861111111111
s = 0.798611111111
s = 0.838611111111
s = 0.810833333333
s = 0.831241496599
s = 0.815616496599
s = 0.827962175611
s = 0.817962175611
s = 0.826226638421
s = 0.819282193976
s = 0.82519935374
s = 0.820097312923
s = 0.824541757368
s = 0.820635507368
s = 0.82409571498
s = 0.821009295227
s = 0.82377937833
s = 0.82127937833
s = 0.823546952026
s = 0.821480836323
s = 0.823371195492
s = 0.821635084381
total s = 0.821635084381
Нужно по идеи найти с какой по счету итерации ответ будет в периоде.
Но он даже при 5000 итераций не уходит в период. Как это можно объяснить преподавателю по информатике?
Уже голову сломал с этим вопросом...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 17:39     Обосновать решение уравнения
Посмотрите здесь:

C++ Решение уравнения
решение уравнения C++
Решение уравнения C++
C++ решение квадратного уравнения С++
Решение уравнения C++
Решение уравнения C++
Решение уравнения C++
C++ Решение уравнения

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sizeofvoid34
 Аватар для Sizeofvoid34
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 4
10.06.2013, 18:32     Обосновать решение уравнения #2
Скорее всего дело в этой строчке кода:
C++
1
 s += sign / static_cast<float>(i * i);
Так как переменная s является типом данных double, то после преобразования типов значение дробной части переменной s искажается. Попробуйте объявить переменную s типа данных float или привести произведение i * i к double.
samarcs
 Аватар для samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
10.06.2013, 18:43  [ТС]     Обосновать решение уравнения #3
s = 1
s = 0.75
s = 0.861111104488
s = 0.798611104488
s = 0.838611125946
s = 0.810833334923
s = 0.831241488457
s = 0.815616488457
s = 0.82796216011
s = 0.817962169647
s = 0.826226651669
s = 0.819282233715
s = 0.825199365616
s = 0.820097327232
s = 0.82454174757
s = 0.82063549757
s = 0.824095726013
s = 0.821009278297
s = 0.823779344559
s = 0.821279346943
s = 0.823546946049
s = 0.821480810642
s = 0.823371171951
s = 0.821635067463
total s = 0.821635067463
Для продолжения нажмите любую клавишу . . .
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
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
int main()
{
    float s = 0;
    int sign = 1;
    for(int i = 1; i < 25; i++)
    {
        s += sign / static_cast<float>(i * i);
        sign = -sign;
        cout << "s = " << setprecision(12) << s << endl;
    }
    cout << "total s = " << setprecision(12) << s << endl;
    system("pause");
    return 0;
}
не сильно изменилось, только если сделать 5000 итераций, то с какой-то итерации число перестает изменяться через итерацию
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
s = 0.8224670886993408203000000000000000000000000000000000000000000000000000000
s = 0.8224672675132751465000000000000000000000000000000000000000000000000000000
Как это можно объяснить? Есть мысль, что операции с в дальнейшем становятся на столько незначительными, что их программа не вычисляет)) правда меня не очень устраивает свое объяснение)
Yandex
Объявления
10.06.2013, 18:43     Обосновать решение уравнения
Ответ Создать тему
Опции темы

Текущее время: 06:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru