Задача: Вычисление числа ПИ

  • Автор темы KOPC1886
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

KOPC1886

#1
Пожалуйста можете помочь с задачей. Напишите программу, которая вычисляет число ПИ с заданной
пользователем точностью. Для вычисления значения числа ПИ воспользуйтесь тем, что значение частичной суммы ряда 1-1/3+1/5-1/7+1/9 ... при суммировании достаточно большого количества членов приближается к значению ПИ/4 . Количество членов равно 502.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
KOPC1886
Я тебе помогу, если ты что-то попытаешься сделать сам. Предлагай свои попытки, иначе тебе просто предложат сделать это за деньги, а в случае отказа тупо проигнорируют... Таковы правила форума.

Добавлено: Есть мысли?
 

lazybiz

Well-known member
03.11.2010
1 339
0
#3
Здесь нужен цикл. Пиши, я тебе скажу что делать дальше.
 
F

flashkpi

#4
Если не хочешь пытаться, тебе ко мне -)))
icq: 588002847
email: flash_1989@ukr.net
 

BashOrgRu

Well-known member
15.03.2009
77
0
#5
Если не то, и не то:

C++:
#include <stdlib.h>
#include <stdio.h>

int main(){
double Sum=0;
unsigned long long i,n;

printf("n=");
scanf("%I64u",&n);/* для Linux: scanf("%llu",&n);*/
for (i=0;i<n;i++){
Sum+=(1.0/(1.0+2.0*i))*((i%2==0) ? 1:(-1));
}
Sum*=4;
printf("Sum=%lf",Sum);
return 0;
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
Вообще ваше кол-во членов 502: Не говорит ни о чем, вовсяком точно не о числе PI (см. скины какая погрешность)
На втором скине я вычислял с точностью 10^-13 честно сказать, задолбался ждать пока посчитает (секунд 40 наверное(это при условии что delit-делитель тогда был int-типа и в нем наступило переполнение, а вот когда он unsigned long - еще считается ;-)), а кол-во итераций там видите насколько разнитца с вашим 502...
Напишите программу, которая вычисляет число ПИ с заданной
пользователем точностью. Для вычисления значения числа ПИ воспользуйтесь тем, что значение частичной суммы ряда 1-1/3+1/5-1/7+1/9 ... при суммировании достаточно большого количества членов приближается к значению ПИ/4 . Количество членов равно 502.
C++:
/*
Напишите программу, которая вычисляет число ПИ с заданной 
пользователем точностью. Для вычисления значения числа ПИ воспользуйтесь тем, что значение частичной суммы ряда 1-1/3+1/5-1/7+1/9 ... 
при суммировании достаточно большого количества членов приближается к значению ПИ/4 . Количество членов равно 502.
*/
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <iomanip>
using namespace std;

void main(void)
{
setlocale(LC_ALL,".1251");
double PI = 0.0; //Сюда как раз и будем вычислять PI
int Iterat; //Кол-во членов ряда для вычисления (вариант 1)
double Esp; //Точность вычисления (вариант 2)
unsigned long delit = 1; //Делитель члена ряда
int Variant; //Опция выбора варианта
unsigned long i = 0; //Число итераций

//Ввод варианта вычисления
cout<<"Введите опцию вычисления (1 - кол-во членов ряда, 2 - заданная точность) : ";
cin>>Variant;
if (Variant == 1) //Если вычисляем по сумме членов ряда
{
cout << "Введите заданную точность вычисления (кол-во чл. ряда) :";
cin >> Iterat;
for (i = 0; i< Iterat; i++)
{
if (i %2 == 0)
PI+= (double)4/delit;
else PI-= (double)4/delit;
delit+=2;
}
}
else if (Variant == 2) //Если вычисляем по заданной точности
{
cout << "Введите заданную точность вычисления (0.00000001) : ";
cin >> Esp; //Введем точность
double Ryad = 4; //Текуйщи член ряда
while (Ryad > Esp) //Пока текущий член ряда > нашей заданной точности
{
Ryad = (double)4/delit; //Вычислим член ряда
if (i %2 == 0)
PI+= Ryad;
else PI-= Ryad;
delit+=2;
i++;
}
}

cout<<"Результат : "<<setprecision(15)<< PI << endl;
cout<<"Итераций : "<< i << endl;

}
 

Вложения

DarkKnight

Well-known member
01.08.2010
653
0
#7
Прошло минут 40-50 (см. скин 1)
Данные проца (см. ск 2)
 

Вложения

DarkKnight

Well-known member
01.08.2010
653
0
#8
Эх, а оно все вычисляет мать ее ;-))
Я уже спать хочу если честно.. ;-)
P.S. Бедные люди которые до 16 знаков в 15ом веке вычисляли число ПИ :)
 

Вложения

  • 225.6 КБ Просмотры: 57
Статус
Закрыто для дальнейших ответов.