ИЗВЕСТИЯ
ТОМСКОГО ОРДЕНА ОКТЯБРЬСКОЙ РЕВОЛЮЦИИ И ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ ПОЛИТЕХНИЧЕСКОГО ИНСТИТУТА имени С. М. КИРОВА
Том 203 1974
ПРОГРАММА ВЫЧИСЛЕНИЯ sin х и cos х В РЕЖИМЕ ПЛАВАЮЩЕЙ ЗАПЯТОЙ НА ЦВМ «МИНСК-1»
В. к. КИВРАН
(Представлена лаучным семинаром УВД ТПИ)
На цифровых вычислительных машинах с фиксированной запятой вычисления тригонометрических функций sin л; и cos л; в режиме плавающей запятой обычно проводятся по следующей схеме.
Аргумент представляется в масштабе 1:2л, и дробная часть его в денормализованном виде приводится к интервалу (—1; 1) известным преобразованием
z =
для вычисления sin х и
X 1 1
2и 4 2
X 1
1 2т: 2
---4
(1)
(2)
для вычисления cos х. Целая часть аргумента отбрасывается.
Затем для приведенного аргумента вычисляется интерполяционный полином Чебышева по схеме Горнера
(3)
Результат нормализуется.
По этой схеме построена стандартная подпрограмма и на ЦВМ «Минск-1».
Эта СП имеет ряд недостатков.
Во-первых, полином Чебышева вычисляется в режиме фиксированной запятой, что приводит при отрицательном порядке аргумента к простому отбрасыванию младших разрядов мантиссы и, следовательно, к увеличению погрешности вычислений.
Во-вторых, ввиду некоторых особенностей операций сдвига на ЦВМ «Минск-1» вычисленное значение функции может оказаться неверным, если порядок аргумента превышает по модулю 31.
И, кроме того, при х——0 вычисленное значение sin х равно 2~29, а не нулю, что может быть неудобным при решении некоторых типов задач.
В настоящей работе предлагается модернизированная СП функций sin л; и cos х, в которой устранены вышеперечисленные недостатки.
Во-первых, в предложенной СП полином Чебышева для sin* с отрицательным порядком вычисляется не с денормализованным аргументом, а с использованием всей его мантиссы. Для этого умножение скобок Горнера в выражении (3) производится на квадрат мантиссы аргумента с последующим сдвигом результата на двойной порядок. Вычисления же полинома для sin л: с положительным порядком аргумента и для cos л: проводятся по-прежнему в режиме фиксированной запятой, что в этом случае равносильно плавающей.
Таким образом, погрешность вычисления полинома вместе с приведением аргумента, по формулам (1) и (2) за счет приемов программирования по предложенной подпрограмме ограничивается лишь дву-мя-тремя младшими разрядами, что значительно меньше средней погрешности интерполяции функции полиномом.
Во-вторых, вычисленное значение функции верно для любого порядка аргумента, так как при вычислении s'mx с положительным порядком и cos х аргумент полагается нулю, если порядок превышает по модулю 31.
В-третьих, в предложенной подпрограмме значение функции s'mx полагается нулю, если аргумент равен нулю или кратный 2 я с любым знаком.
В заключение следует отметить, что применение более тщательных приемов программирования значительно повысило точность вычисления sin я, особенно ггри очень малых аргументах. Точность же вычисления cos х повысить не удается, так как данный алгоритм вычисления cos х не позволяет это сделать.
В приложении приведена программа с краткими пояснениями.
Приложение. Программа вычисления sin .г и cos х с плавающей запятой на ЦВМ «Минск-1».
Порядок аргумента помещается по адресу 0020, мантисса—0021, значение функции соответственно — 0022 и 0023.
Для вычисления sin л: вход с СП производится по адресу 2000, для
вычисления cos х - - 2002.
2000 11 0004 0012 вход для вычисления sin х,
1 24 2003 0023
2 05 0000 0023 вход для вычисления cos х,
3 03 2050 0021 аргумент в частях круга,
4 16 0023 0020 с 2006 вычисляется sin х с р>0
5 54 2006 2017 и cos х, а с 2017- - sin х с р < 0,
6 — 17 2033 0020
7 54 2012 2012 снятие ограничения
2010 05 0000 0021 порядка аргумента,
1 24 2016 0000
2 — 07 0020 0021 денормализация аргумента и
3 54 2016 2015 приведение его к интервалу (0;
4 24 2016 0000 1),
5 20 0001 0021
6 05 0000 0020
7 — 27 0012 0022 удвоение порядка
2020 10 0023 0021
1 71 0002 0000 вычисление qj2,
2 71 2057 0000
3 — 27 0012 0021
4 — 27 0012 0024
5 23 0024 0024
6 — 17 2033 0022
7 54 0000 2042
2030 05 2046 2034
1 05 2051 0023
2 13 0024 0023
3 — 37 0022 0005
4 20 2052 0023
5 00 ООП 2034
6 — 71 2047 0000
7 54 2032 0000
2040 13 0021 0023
1 20 0021 0021
2 15 0021 0022
3 10 0020 0022
4 20 0012 0022
5 24 0027 0000
6 20 2052 0023
7 20 2057 0023
2050 12 1371 4067
1 — 00 0000 7130
2 00 0052 0011
3 — 00 2313 2060
4 05 0632 7370
5 — 51 2567 4711
6 44 4176 6520
7 20 0000 0001
йш х = 0, если \р2\ > 31,
вычисление полинома с <0,
нормализация результата,
псевдокоманды,
1 /2л,
Сь>
с А,
Сг, С2> С Ь
1/4 _ 2-зо.
ЛИТЕРАТУРА
1. Библиотека стандартных подпрограмм для ЭЦВМ «Минск-1», часть II, Минск,
1961.