Магический косинус
Магический косинус
Введённое мной правило (“каждый должен просмотреть и снабдить метаданными хотя бы пять книг в день”), наконец стало приносить плоды.
Среди всякого интереснейшего художественного мусора обнаружился ни больше ни меньше, а справочник по математике! Оказывается, этот мир не такой уж и средневековый: теоретические знания развиты достаточно неплохо. Конечно “неплохо” — с моей точки зрения, возможно, более серьёзный специалист посчитает иначе.
Так вот. В самом начале, когда мы доделали Орион-128 и стали развивать стандартную библиотеку для него, то сразу встал вопрос: “А как запрограммировать набор математических функций, например, вычисление того же косинуса?”.
Думаю, если с подобной задачей подойти к среднестатистическому программисту моего мира, то он ответит: “Это очень просто! Нужно найти в интернете подходящий ряд, а после — запрограммировать его.” И он будет прав, но… только на Земле.
Программа, вычисляющая косинус, действительно займёт всего десяток строк кода, но ведь эту формулу нужно знать, или, на худой конец, уметь её вывести!
Увы, на Рее нет интернета, и если с реализацией алгоритмов вычисления квадратных и кубических корней я худо-бедно справился (изобразил нечто похожее на деление столбиком, но для корней), то с формулами тригонометрии у меня получился провал.
Однако, вычислять синусы и косинусы было нужно (как минимум для дальномеров, измерителей углового расстояния и так далее), поэтому, в отсутствие нужных знаний в моей голове, пришлось выкручиваться следующим образом: я построил вычислитель, состоящий из нетянущихся магических нитей.
Это плетение содержало в себе окружность и два крестика. Первый крестик буквально изображал декартову систему координат, а второй помещался в точку на окружности, и определял отсчёты по осям X и Y.
Приходит от компьютера задание: посчитать синус того или иного угла. На окружности, по магическому сопротивлению её нити, находится точка, соответствующая запросу, и в неё помещается второй крестик. В итоге компьютеру возвращаются три числа — длины сторон прямоугольного треугольника, содержащего такой угол.
В общем, получилось натуральное построение чертежа, а затем снятие с него измерений.
Найдя же в обнаруженном справочнике требуемые степенные ряды, я собрался было выбросить всю эту машинерию с ниточками, памятуя, что помимо низкого быстродействия, она была не такой точной, как хотелось бы. Однако в этот процесс вмешался Косм со своим маниакальным желанием понимать каждую тонкость.
— А вдруг я тоже попаду в другой мир и мне придётся строить всё это с нуля?! — часто говорил он.