Re: число е

From
Alexey Krasnov ()
To
Michael Varamashvili
Date
2002-10-31T11:43:28Z
Area
RU.ALGORITHMS
From: Alexey Krasnov <krasnov@zeim.ru>

Здравствуйте, 30 октября 2002 г., 21:13:08, вы писали:

MV>  MV>>  А как можно сабж посчитать до любого знака, как можно точнее?
MV>  AK> Считаешь ряд Тейлора для функции exp(1) используя арифметику длинных
MV>  AK> чисел
MV> А как мне поделить да числа в 1000 знаков каждое? С мантисой?

Я сам вычислял е с точностью 12000 знаков шесть лет назад, на
спектруме 48к. Вот все, что смог вспомнить:

1. Пусть хотим вычислить с точностью до N знака после запятой.

2. Выделяем три массива по N+1 знака в каждом.

3. Ряд Тейлора:
    e = 1 + 1/2! + 1/3! + ....
   то есть вычисляем сумму, каждый новый член получается из
   предыдущего так:
   Xn+1 = Xn / (n+1)
   Следовательно, в первом массиве накапливаем сумму, во втором храним
   текущий член, в третьем вычисляем следующий член суммы.
   
4. Число представляется как обычная последовательность цифр. По цифре
   на байт.
   
5. Для простоты умножаем и ряд и результат на 2^N. В первом байте
   массива будет накапливаться целая часть, во всех остальных -
   дробная.

6. Осталось реализовать две операции: сумму и деление.
   Сумма вычисляется тривиально - столбиком, начиная с младшего
   разряда.

7. Нам всегда требуется делить число 2^N на некоторое число, максимум
   которого N. Делим обычным столбиком. Операция упрощается тем, что
   "сносим" всегда нули и взятие остатка от очередного деления можно
   выполнить уже в обычной 2-4 байтовой целочисленной арифметике.

Все прекрасно выполнялось на 8-битном ассемблере без аппаратного деления, в
условиях ограниченности ресурсов, так что я не думаю, что у тебя могут
возникнуть какие-либо проблемы с реализацией на каком-нибудь ЯВУ на PC.
   
===============
С уважением,
Алексей Краснов
krasnov[+]zeim.ru



-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: Talk.Mail.Ru (2:5020/400)