Извлечение квадратного корня на арифмометре "Феликс"

С.В.Савич

Вычисление квадратного корня основано на свойстве арифметической прогрессии нечётных чисел: сумма нечётных чисел, начиная с единицы, равна квадрату номера нечётного числа. Оригинальная и эффективная схема вычисления квадратного корня на арифмометре "Феликс" разработана автором и представляет собой модифицированный алгоритм деления с изменяемым в процессе вычисления делителем. Далее будет представлена пошаговая инструкция процедуры извлечения квадратного корня.
Для примера, извлечём корень из 2. Устанавливаем на барабане исходное число 2, начиная с крайнего левого разряда, и переносим его в сумматор так, чтобы число начиналось в 13-м разряде сумматора. Обнуляем барабан и счётчик оборотов и сдвигаем каретку вправо до упора. Отмечаем в сумматоре положение десятичной запятой. Разбиваем число в уме на группы по две цифры, начиная от запятой, влево и вправо. Это понадобится для указания разряда, из которого начинается вычитание нечётных чисел, а также для определения положения запятой в результате.
Из младшего разряда крайней левой группы начинаем последовательно вычитать нечётные числа - 1, 3, 5 и т.д. Дальнейший ход вычислений показан в таблице 1 (подробная последовательность действий и показаний всех счётчиков по строкам слева направо сверху вниз. Слово "!звонок!" означает появление отрицательного значения в сумматоре).
Результат извлечения корня с точностью 8 десятичных знаков отображается в счётчике оборотов.
Таблица 1.
Счётчик оборотов	Действия с барабаном	Барабан	Действия с рукояткой и кареткой	Сумматор	
00000000		000000000		2000000000000	
Далее будут показаны только цифры, участвующие в операции в текущей строке	
0	устанавливаем на барабане 1 в 6-м разряде	   1	делаем -оборот	1	
1	уст. в 6-м разр. 3	   3	-оборот	!звонок!	
2	ничего не трогаем	   3	+оборот каретка	100	
1	возвращаем рычажок на 1 позицию назад (здесь будет получаться удвоенное значение корня) и устанавливаем 1 в следующем (5-м разряде)	   21	-оборот	 79	
11	уст. 3	   23	-оборот	 56	
12	уст. 5	   25	-оборот	 31	
13	уст. 7	   27	-оборот	  4	
14	уст. 9	   29	-оборот	!звонок!	
15	ничего не трогаем	   29	+оборот каретка	  400	
14	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (4-м разряде)	   281	-оборот	  119	
141	уст. 3	   283	-оборот	!звонок!	
142	ничего не трогаем	   283	+оборот каретка	  11900	
141	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (3-м разряде)	   2821	-оборот	   9079	
1411	уст. 3	   2823	-оборот	   6256	
1412	уст. 5	   2825	-оборот	   3431	
1413	уст. 7	   2827	-оборот	    604	
1414	уст. 9	   2829	-оборот	!звонок!	
1415	ничего не трогаем	   2829	+оборот каретка	    60400	
1414	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (2-м разряде)	   28281	-оборот	    32119	
14141	уст. 3	   28283	-оборот	     3836	
14142	уст. 5	   28285	-оборот	!звонок!	
14143	ничего не трогаем	   28285	+оборот каретка	     383600	
14142	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (1-м разряде)	   282841	-оборот	     100759	
141421	уст. 3	   282843	-оборот	!звонок!	
141422	ничего не трогаем	   282843	+оборот каретка	     1007590	
141421	возвращаем рычажок на 1 назад, далее, как обычное деление	   282842	-оборот	      724748	
1414211		   282842	-оборот	      441906	
1414212		   282842	-оборот	      159064	
1414213		   282842	-оборот	!звонок!	
1414214		   282842	+оборот каретка	      1590640	
1414213		   282842	-оборот	      1307798	
14142131		   282842	-оборот	      1024956	
14142132		   282842	-оборот	       742114	
14142133		   282842	-оборот	       459272	
14142134		   282842	-оборот	       176430	
14142135		   282842	-оборот	!звонок!	
14142136		   282842	+оборот	       176430	
14142135		   282842	стоп	       176430	
Как видим, 1,4142135 - это и есть квадратный корень из 2.
Определение положения запятой производится следующим образом: количество цифр целой части результата равно количеству пар цифр в целой части аргумента, каждой паре цифр аргумента соответствует одна цифра результата.
Примеры:
аргумент		61 71 , 67 36						(1)
результат		 7  8 ,  5  6
аргумент		0 , 00 78 93 10					(2)
результат		0 ,  0  8  8  8  4  3  1  2
Для чисел x<1 (пример 2) нули слева можно не набирать и тогда точность будет выше (больше значащих цифр будет в результате).

Теперь попробуем извлечь корень из 20. Устанавливаем на барабане исходное число 20, начиная с крайнего левого разряда, и переносим его в сумматор так, чтобы число начиналось в 13-м разряде сумматора. Обнуляем барабан и счётчик оборотов и сдвигаем каретку вправо до упора. Отмечаем в сумматоре положение десятичной запятой.
Из младшего разряда крайней левой группы начинаем вычитать нечётные числа - 1, 3, 5 и т.д. Дальнейший ход вычислений показан в таблице 2 (последовательность действий и показаний всех счётчиков такая же, как и в предыдущей таблице).
Таблица 2.
Счётчик оборотов	Действия с барабаном	Барабан	Действия с рукояткой и кареткой	Сумматор	
00000000		000000000		2000000000000
	
Далее будут показаны только цифры, участвующие в операции в текущей строке	
0	устанавливаем на барабане 1 в 5-м разряде	    1	-оборот	19	
1	уст. в 5-м разряде 3	    3	-оборот	16	
2	уст. 5	    5	-оборот	11	
3	уст. 7	    7	-оборот	 4	
4	уст. 9	    9	-оборот	!звонок!	
5	ничего не трогаем	    9	+оборот каретка	 400	
4	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (4-м разряде)	    81	-оборот	 319	
41	уст. 3	    83	-оборот	 236	
42	уст. 5	    85	-оборот	 151	
43	уст. 7	    87	-оборот	  64	
44	уст. 9	    89	-оборот	!звонок!	
45	ничего не трогаем	    89	+оборот каретка	  6400	
44	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (3-м разряде)	    881	-оборот	  5519	
441	уст. 3	    883	-оборот	  4636	
442	уст. 5	    885	-оборот	  3751	
443	уст. 7	    887	-оборот	  2864	
444	уст. 9	    889	-оборот	  1975	
445	уст. 11	    891	-оборот	  1084	
446	уст. 13	    893	-оборот	   191	
447	уст. 15	    895	-оборот	!звонок!	
448	ничего не трогаем	    895	+оборот каретка	   19100	
447	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (2-м разряде)	    8941	-оборот	   10159	
4471	уст. 3	    8943	-оборот	    1216	
4472	уст. 5	    8945	-оборот	!звонок!	
4473	ничего не трогаем	    8945	+оборот каретка	    121600	
4472	возвращаем рычажок на 1 назад и устанавливаем 1 в следующем (1-м разряде)	    89441	-оборот	     32159	
44721	уст. 3	    89443	-оборот	!звонок!	
44722	ничего не трогаем	    89443	+оборот каретка	     321590	
44721	возвращаем рычажок на 1 назад, далее, как обычное деление	    89442	-оборот	     232148	
447211		    89442	-оборот	     142706	
447212		    89442	-оборот	      53264	
447213		    89442	-оборот	!звонок!	
447214		    89442	+оборот каретка	      532640	
447213		    89442	-оборот	      443198	
4472131		    89442	-оборот	      353756	
4472132		    89442	-оборот	      264314	
4472133		    89442	-оборот	      174872	
4472134		    89442	-оборот	       85430	
4472135		    89442	-оборот	!звонок!	
4472136		    89442	+оборот каретка	       854300	
4472135		    89442	-оборот	       764858	
44721351		    89442	-оборот	       675416	
44721352		    89442	-оборот	       585974	
44721353		    89442	-оборот	       496532	
44721354		    89442	-оборот	       407090	
44721355		    89442	-оборот	       317648	
44721356		    89442	-оборот	       228206	
44721357		    89442	-оборот	       138764	
44721358		    89442	-оборот	        49322	
44721359		    89442	-оборот	!звонок!	
44721358		    89442	+оборот	        49322	
44721359		    89442	стоп	        49322	
Результат 4,4721359

Для вычисления квадратного корня с точностью 8 десятичных знаков требуется в среднем 40 - 50 оборотов рукоятки арифмометра.
Обратите внимание - этот метод может быть реализован только на арифмометре системы Однера ("Феликс" и аналогичные модели), так как в этом арифмометре можно менять числа во время выполнения операции. Другие механические счётные машины такой возможности не имеют.
Описанный алгоритм может быть с успехом использован при программировании функции вычисления квадратного корня на ЭВМ, так как является весьма оптимальным по быстродействию и затратам оборудования.