Программа «Факториал-2» (152)

Программа вычисляет факториалы натуральных чисел N! = 1×2×3×...×N. При N<70 числа перемножаются напрямую, в цикле. При N≥70 используется уточнённая формула Стирлинга для log N! с членами до N5 включительно, что позволяет вычислять факториалы действительных чисел Г(N+1) практически мгновенно и с разумной точностью. Её быстродействие — существенный плюс по сравнению с программой «Факториал», если вам приходится часто вычислять факториалы больших чисел.

Порядок числа выводится в регистр X, цифры мантиссы можно взять в регистре Y. Разумеется, 1≤RY<10. Расположение чисел в стеке обратно по отношению к программе «Факториал» и сделано для того, чтобы с помощью двух команд F 10x × можно было привести вычисленное значение факториала в экспоненциальный вид, используемый в ЭКВМ. Конечно, такой трюк возможен лишь если RX≤99, то есть N<70.

Тестовые примеры (МК-161 версия 1.08):
10! = 3,6288 × 106 (все знаки верны)
69! = 1,7112245242812 × 1098 (13 знаков)
100! ≈ 9,3326215440544 × 10157 (10 знаков)
220! ≈ 2,2838603357443 × 10421 (10 знаков)
254! ≈ 1,3140590927665 × 10502 (10 знаков)
500! ≈ 1,2201368258939 × 101134 (10 знаков; точное значение 1,220136825991110… E1134)
1000! ≈ 4,0238725995403 × 102567 (10 знаков; точное значение 4,0238726007709377… E2567)
10000! ≈ 2,8462596692423 × 1035659 (8 знаков; точное значение 2,8462596809170545189… E35659)
99000! ≈ 4,2409642352665 × 10451575 (7 знаков; точное значение 4,2409644555330858657… E451575; вам не приходится ждать 19 минут)
1000000! ≈ 8,2639294326541 × 105565708 (6 знаков; результат тоже получается мгновенно)
ну и так далее...

Программа вдохновлена программой 3.35 из третьего издания справочника проф. Дьяконова и способна её заменить для калькуляторов, совместимых с МК-152, т.к. точнее.

;
; Программа «Факториал-2»
; Автор: Васильев И.В., 21 сентября 2011 г., Москва

; Вычисляет факториал F = 1*2*..*n = n! целого числа n методом перемножения (n<70).
; При n≥70 использует уточнённую формулу Стирлинга (с членами до n5)

; Инструкция: n В/0 С/П "порядок" ↔ "мантисса"
; Программа весьма вольно использует регистр R0
;
Start(00):
		ВП П0
		70 –
		Fx<0 Sterling(21)
		1
Loop(08):
		ИП0 × FL0 Loop(08)
		В↑  Flg K[x] П0
		F 10x ÷ ИП0
		БП qq(67)
Sterling(21):
		ИП0 Fx2 7 × F1/x 2 F1/x –
		ИП0 Fx2 15 × ÷
		1 +
		ИП0 12 × ÷
		ИП0 –
		1 Fex Flg ×
		ИП0 2 × Fπ × Flg 2 ÷ +
		ИП0 В↑  Flg × +

		K[x] FВx K{x} F 10x ↔
qq(67):	С/П
		БП Start(00)

Т.к. здесь недавно у новичков возникали вопросы по поводу того, как мы пишем программы для ЭКВМ, поделюсь опытом. Блоки этой программы мне было удобнее всего сочинять на бумаге. Потом я набивал их в обычном текстовом редакторе. Из-за того, что у меня сейчас нет под рукой Windows, вводил программу в МК-161 с клавиатуры, записывая адреса в скобочки после меток. Потом прошёлся по командам перехода, перебив адреса.

Если есть возможность запустить программу MK.EXE, ввод программы в ЭКВМ значительно упрощается.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
Точность Автор: AtH
Разность Автор: SMB
Вроде Автор: AtH