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

Дробные числа, С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Fl4tron
Сообщений: n/a
03.05.2011, 00:14     Дробные числа, С++ #1
Уважаемые знатоки, требуется ваша помощь. Передо мной стоит задача посчитать приблизительную сумму ряда, путем вычисления частичных сумм. Нужно посчитать частичный суммы первых 10, 10^2, 10^3, 10^4 и 10^5. Проблемы возникают при подсчете суммы первых 10^5 элементов. Программа выдает результат -5.46 в отличии от ожидаемых 0.999. Код следующий:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <math.h>
#include <tchar.h>
#include <conio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
using namespace std;
double func(int n)
{
double x=0;
for (int i=0; i < n; i++) {
    x=x+((84.0/13.0)/(i*i+14*i+48));
}
return x;
}
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<func(100000)<<"\n";
    cout<<"Press any key\n";
    getch();
    return 0;
}
//---------------------------------------------------------------------------
Есть какие нибудь идеи?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 00:14     Дробные числа, С++
Посмотрите здесь:

целые и дробные числа C++
Как кодираются дробные числа в пакетах? C++
C++ дробные числа
Дробные числа C++
C++ Дробные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 00:19     Дробные числа, С++ #2
1. 84.0/13.0 вынеси из цикла и считай 1 раз.
2. i = 100000? i*i = 10 000 000 000 - не влезает в int.
Fl4tron
Сообщений: n/a
03.05.2011, 00:33     Дробные числа, С++ #3
Спасибо! Код приведенный к следующему виду заработал!
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <math.h>
#include <tchar.h>
#include <conio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
using namespace std;
double func(long n)
{
double x=0;
float k;
k=84.0/13.0;
for (long double i=0; i < n; i++) {
    x=x+(k/(i*i+14*i+48));
}
return x;
}
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<func(100000)<<"\n";
    cout<<"Press any key\n";
    getch();
    return 0;
}
//---------------------------------------------------------------------------
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 00:51     Дробные числа, С++ #4
Я б для надежности еще написал:
double i2;

i2 = i*i; -- это в цикле...
Yandex
Объявления
03.05.2011, 00:51     Дробные числа, С++
Ответ Создать тему
Опции темы

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