Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория / 2 / 01-CHICL.DOC
Скачиваний:
43
Добавлен:
30.04.2013
Размер:
60.42 Кб
Скачать

Вычисления с n значащими цифрами

Дрейфус, Ганглоф - Практика программирования на Фортране, стр.49 .

Числа с плавающей запятой обычно имеют от 6 до 9 значащих цифр, числа с фиксированной запятой - от 10 до 12. Если же требуется получить больше значащих цифр, то их можно получить лишь с использованием плавающей запятой с двойной точностью (от 16 до 24). Если же хотят проводить вычисления со 100 значащими цифрами, то надо придумать что-нибудь другое.

Предположим, что необходимо провести вычисления со 100 цифрами. В этом случае можно использовать слова, каждое из которых содержит, например, по 6 цифр. Таким образом для 100 цифр понадобятся 17 слов, при этом получим даже 102 цифры.

Обратные величины от целого числа: Требуется вычислить и напечатать число, обратное целому числу N .. Применяют следующий метод:

Делят 1 000 000 на выбранное число N. Частное от деления дает первые 6 цифр результата. Остаток, умноженный на 1 000 000, в свою очередь делится на N, и частное этого деления дает следующие 6 цифр результата. Процесс продолжается до тех пор, пока не будут получены все требуемые цифры. Например, для N = 19:

(1 · 1 000 000) / 19 = 052 631 R = 11

(11 · 1 000 000) / 19 = 578 947 R = 7

(7 · 1 000 000) / 19 = 368 421 R = …

откуда 1/19 = 0.052 631 578 947 368 421 …

Ввод n

Описание массива k[17]

m = 1 000 000

Вывод n, ' 0.'

Для I=1 до 17

k[I]=Int(m/n)

Вывод k[I]

n2=m-k[I]*n

m=n2*1 000 000

Факториал: вычислить с 102 значащими цифрами n! для n в интервале от 1 до 70. Для этого в первое слово массива записывают 1, в остальных словах оставляют нули.

Чтобы получить n!, если известно (n-1)!, умножают последовательно каждое слово на n. Если в промежуточном произведении больше 6 цифр, то избыточные слева цифры надо прибавить к следующему частному произведению. Например

18! = 6 402 373 705 728 000

728 000 · 19 = 13 832 000

¾¾¾¾¾¾¾¾¿

13 + 373 705 19 = 7 100 408

¾¾¾¾¾¾¾¾¿

7 + 6 402 · 19 = 0 121 645

откуда 19! = 121 645 100 408 832 000 .

dimension k(17)

do I=1,17 : k(I) = 0

k(1) =1

do 2 I=1,70

m=0

do 3 j=1,17

k(j) = k(j) * I + m

m = k(j)/1000000

k(j)=mod(k(j),1000000)

3 continue

print I, k(I)

2 continue

Число е, основание натуральных логарифмов вычислить 102 первых десятичных разряда числа е с помощью ряда:

e = 1 + 1/1! + 1/2! + 1/3! + … + 1/n! .

Необходимо иметь три переменных (или, точнее, три массива): J, K и L .Чтобы получить 1.n! будем делить 1/(n-1)! на n! .

K будет содержать 1/(n-1)!

L будет содержать частное от деления K на n.

J накапливает сумму последовательных значений 1/n!: это и будет значение е.

К присваивается начальное значение 5000…0, что представляет собой 1.2! . При этом вычисляется лишь дробная часть числа, а целая часть (равная 2) должна быть включена заранее в формат печати.

Получение двух последовательных значений (J=L+J) производится справа (самое большое значение индекса). Так как в этом точном случае перенос может принимать лишь значение 0 или 1, желательно избежать деления и вычисления остатка и ограничиться операциями сравнения и вычитания.

Dimension j(17), k(17), L(17)

do 1,17 j(I)=0: k(17)=0

k(1)=500000

j(1)=k(1)

do 3 n=3,70

m=0

do 2 I=1,17

L(I) = (k(I)+m)/n

m = mod(k(I)+m,n)*1000000

2 continue

do 5 I=1,17

5 k(I)=L(I)

m=0

I=17

8 continue

j(I)=j(I)+L(I)+n

m=0

if j(I) > 1000000 then goto 7

j(I)=j(I)-1000000

m=1

7 continue

I=I-1

if I > 1 then goto 8

print(n, " 2.")

Print(j)

3 continue

Соседние файлы в папке 2