Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2010, 14:41   #1
MrakSPb
 
Регистрация: 19.12.2009
Сообщений: 7
По умолчанию Вычисление числа e, Pi с заданной точностью

Найти с заданной точностью (20-1000 знаков после запятой) одну из замечательных констант (например, e, π).

Из того что осилил сам:
Код:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

int main()
{
	setlocale(LC_ALL, "Russian");

	int n, i;
	double x = 1;
	long double e = 1;

	cout << "Введите количество знаков после запятой:" << endl;
	cin >> n;

	int *pi=new int[n];
	
	for (i=1;i<=n;i++) // ряд тейлора, за точность берем количество знаков после запятой :)
	{
		x = x*i;
		e = e + 1/x;
	}

	long double Var = e;
	
	double Stepen = 10;
	for (i=1;i<=n;i++) // записываем знаки после запятой в массив, размером n
	{
		pi[i-1] = int((Var - int(Var)) * 10);
		Var = e * pow(Stepen, i);
	}

	cout << e << endl;

	for (i=0;i<n;i++) cout << pi[i] << endl;
	getch();

    return 0;
}
Проблема в вычислении 10 и выше знака после запятой, видимо в long double, равно как и в double выделяется память только для 9 знаков после запятой (по крайней мере у меня получилось именно так). Как же быть?
MrakSPb вне форума Ответить с цитированием
Старый 07.05.2010, 17:41   #2
Card1nal
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 44
По умолчанию

длинная арифметика рулит.

Последний раз редактировалось Card1nal; 07.05.2010 в 17:42. Причина: ошибся ссылкой
Card1nal вне форума Ответить с цитированием
Старый 12.05.2010, 12:41   #3
FPU128bit
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от MrakSPb Посмотреть сообщение
Найти с заданной точностью (20-1000 знаков после запятой) одну из замечательных констант (например, e, π).

Из того что осилил сам:
Код:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

int main()
{
	setlocale(LC_ALL, "Russian");

	int n, i;
	double x = 1;
	long double e = 1;

	cout << "Введите количество знаков после запятой:" << endl;
	cin >> n;

	int *pi=new int[n];
	
	for (i=1;i<=n;i++) // ряд тейлора, за точность берем количество знаков после запятой :)
	{
		x = x*i;
		e = e + 1/x;
	}

	long double Var = e;
	
	double Stepen = 10;
	for (i=1;i<=n;i++) // записываем знаки после запятой в массив, размером n
	{
		pi[i-1] = int((Var - int(Var)) * 10);
		Var = e * pow(Stepen, i);
	}

	cout << e << endl;

	for (i=0;i<n;i++) cout << pi[i] << endl;
	getch();

    return 0;
}
Проблема в вычислении 10 и выше знака после запятой, видимо в long double, равно как и в double выделяется память только для 9 знаков после запятой (по крайней мере у меня получилось именно так). Как же быть?
Для Visual Studia double и long double одно и тоже. Потробуй скачать интеловский компилятор.
FPU128bit вне форума Ответить с цитированием
Старый 12.05.2010, 12:51   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Не уверен, что какой-нибудь из компиляторов общего назначения предоставляет встроенные типы, имеющие точность 1000 знаков после запятой (это что-то порядка 400 байт).
Как и было сказано, здесь поможет только длинная арифметика.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисления с заданной точностью gessi Паскаль, Turbo Pascal, PascalABC.NET 8 29.10.2014 21:40
Вычисление определенного интеграла с заданной точностью Arzamaks Помощь студентам 9 19.02.2010 10:09
Вычисление функции с заданной точностью. Absent Помощь студентам 1 21.11.2008 13:30