Jump to content

КОРДИК

(Перенаправлено с DCORDIC )

CORDIC ( цифровой компьютер вращения координат ), Алгоритм Волдера , Поразрядный метод , Круговой CORDIC ( Джек Э. Волдер ), [1] [2] Линейный CORDIC , гиперболический CORDIC (Джон Стивен Вальтер), [3] [4] и генерализованный гиперболический CORDIC ( GH CORDIC ) (Yuanyong Luo et al.), [5] [6] это простой и эффективный алгоритм для вычисления тригонометрических функций , гиперболических функций , квадратных корней , умножения , деления , а также экспонент и логарифмов с произвольной базой, обычно сходящейся с одной цифрой (или битом) на итерацию. Таким образом, CORDIC также является примером поразрядных алгоритмов . CORDIC и тесно связанные с ним методы, известные как псевдоумножение и псевдоделение или объединение коэффициентов, обычно используются, когда аппаратный умножитель недоступен (например, в простых микроконтроллерах и программируемых пользователем вентильных матрицах или FPGA), поскольку единственные операции, которые они требуют, — это сложение . вычитания , битовый сдвиг и таблицы поиска . По существу, все они относятся к классу алгоритмов сдвига и сложения . В информатике CORDIC часто используется для реализации арифметики с плавающей запятой , когда на целевой платформе отсутствует аппаратное умножение по причинам стоимости или пространства.

Подобные математические методы были опубликованы Генри Бриггсом еще в 1624 году. [7] [8] и Роберт Флауэр в 1771 году, [9] но CORDIC лучше оптимизирован для несложных процессоров с конечным состоянием.

КОРДИК был задуман в 1956 году. [10] [11] из Джек Э. Волдер отдела аэроэлектроники Convair . из-за необходимости заменить аналоговый резольвер в навигационном компьютере бомбардировщика B-58 более точным и быстрым цифровым решением, работающим в реальном времени [11] Поэтому CORDIC иногда называют цифровым резольвером . [12] [13]

В своем исследовании Волдер был вдохновлен формулой из Справочника по химии и физике CRC 1946 года : [11]

где таков, что , и .

Его исследования привели к созданию внутреннего технического отчета, предлагающего алгоритм CORDIC для решения функций синуса и косинуса , а также прототип компьютера, реализующего его. [10] [11] В докладе также обсуждалась возможность вычисления вращения гиперболических координат , логарифмов и экспоненциальных функций с помощью модифицированных алгоритмов CORDIC. [10] [11] В это же время было задумано использование CORDIC для умножения и деления . [11] Основываясь на принципе CORDIC, Дэн Х. Даггетт, коллега Волдера из Convair, разработал алгоритмы преобразования между двоичными числами и двоично-десятичными числами (BCD). [11] [14]

В 1958 году Convair наконец приступила к созданию демонстрационной системы для решения радиолокационной фиксации задач под названием CORDIC I , завершенной в 1960 году без Волдера, который уже покинул компанию. [1] [11] Более универсальные CORDIC II модели A (стационарный) и B (бортовой) были построены и испытаны Даггеттом и Гарри Шуссом в 1962 году. [11] [15]

Алгоритм CORDIC Волдера был впервые публично описан в 1959 году. [1] [2] [11] [13] [16] что привело к его включению в навигационные компьютеры такими компаниями, как Martin-Orlando , Computer Control , Litton , Kearfott , Lear-Siegler , Sperry , Raytheon и Collins Radio . [11]

Волдер объединился с Малкольмом Макмилланом для создания Athena , с фиксированной точкой, настольного калькулятора использующего его двоичный алгоритм CORDIC. [17] Дизайн был представлен Hewlett-Packard в июне 1965 года, но не принят. [17] Тем не менее, Макмиллан познакомил Дэвида С. Кокрана (HP) с алгоритмом Волдера, а когда Кокрен позже встретил Волдера, он посоветовал ему использовать аналогичный подход. Джон Э. Меггитт (IBM [18] ) предложил в 1961 году псевдоумножение и псевдоделение . [18] [19] Метод Меггитта также предполагал использование десятичной системы счисления. [18] а не по основанию 2 , как до сих пор использовалось в CORDIC Волдера. Эти усилия привели к реализации логики ROMable в прототипе десятичной машины CORDIC внутри Hewlett-Packard в 1966 году. [20] [19] созданный и концептуально основанный на Томаса Осборна прототипе Green Machine , четырехфункциональном настольном калькуляторе с плавающей запятой, который он разработал на основе DTL . логики [17] в декабре 1964 года. [21] Результатом этого проекта стала публичная демонстрация первого настольного калькулятора Hewlett-Packard с научными функциями, HP 9100A , в марте 1968 года, а серийное производство началось позже в том же году. [17] [21] [22] [23]

Когда Wang Laboratories обнаружила, что в HP 9100A используется подход, аналогичный методу комбинирования факторов в их более ранней версии LOCI-1. [24] (сентябрь 1964 г.) и LOCI-2 (январь 1965 г.) [25] [26] Logarithmic Computing Instrument , Настольные калькуляторы [27] они безуспешно обвинили Hewlett-Packard в нарушении одного из патентов Ан Ванга в 1968 году. [19] [28] [29] [30]

Джон Стивен Вальтер из Hewlett-Packard обобщил алгоритм в алгоритм Unified CORDIC в 1971 году, позволив ему вычислять гиперболические функции , натуральные экспоненты , натуральные логарифмы , умножения , деления и квадратные корни . [31] [3] [4] [32] CORDIC Подпрограммы для тригонометрических и гиперболических функций могут использовать большую часть своего кода. [28] Результатом этой разработки стал первый научный портативный калькулятор HP -35 в 1972 году. [28] [33] [34] [35] [36] [37] На основе гиперболического CORDIC Yuanyong Luo et al. в 2019 году далее предложил обобщенный гиперболический CORDIC (GH CORDIC) для прямого вычисления логарифмов и экспонент с произвольной фиксированной базой. [5] [6] [38] [39] [40] Теоретически гиперболический CORDIC является частным случаем GH CORDIC. [5]

Первоначально CORDIC был реализован только с использованием двоичной системы счисления , и, несмотря на то, что Меггитт предлагал использовать десятичную систему для своего подхода к псевдоумножению, десятичная система CORDIC оставалась практически неслыханной в течение еще нескольких лет, поэтому Герман Шмид и Энтони Богацки все еще предлагали это как новинка еще в 1973 году [16] [13] [41] [42] [43] и только позже выяснилось, что Hewlett-Packard внедрила его уже в 1966 году. [11] [13] [20] [28]

Десятичный CORDIC стал широко использоваться в карманных калькуляторах . [13] большинство из которых работают в двоично-десятичном формате (BCD), а не в двоичном формате. Это изменение формата ввода и вывода не повлияло на основные алгоритмы вычислений CORDIC. CORDIC особенно хорошо подходит для портативных калькуляторов, в которых низкая стоимость (и, следовательно, малое количество вентилей) гораздо важнее скорости.

CORDIC реализован в процессоре на базе ARM STM32G4 , Intel 8087 , [43] [44] [45] [46] [47] 80287 , [47] [48] 80387 [47] [48] до 80486 [43] серии сопроцессоров, а также в Motorola 68881 [43] [44] и 68882 для некоторых видов инструкций с плавающей запятой, главным образом как способ уменьшить количество вентилей (и сложность) подсистемы . FPU

Приложения

[ редактировать ]

CORDIC использует простые операции сдвига-сложения для нескольких вычислительных задач, таких как вычисление тригонометрических, гиперболических и логарифмических функций, действительные и комплексные умножения, деление, вычисление квадратного корня, решение линейных систем, оценка собственных значений , разложение по сингулярным значениям , QR-факторизация и многие другие. Как следствие, CORDIC использовался для приложений в различных областях, таких как сигналов и обработка изображений , системы связи , робототехника и 3D-графика, помимо общих научных и технических вычислений. [49] [50]

Аппаратное обеспечение

[ редактировать ]

Алгоритм использовался в навигационной системе «Аполлон» программы лунного вездехода для расчета пеленга и дальности или расстояния до лунного модуля . [51] [52] CORDIC использовался для реализации математического сопроцессора Intel 8087 в 1980 году, что позволило избежать необходимости реализации аппаратного умножения. [53]

CORDIC обычно работает быстрее, чем другие подходы, когда аппаратный умножитель недоступен (например, микроконтроллер) или когда количество вентилей, необходимых для реализации поддерживаемых им функций, должно быть сведено к минимуму (например, в FPGA или ASIC ).Фактически, CORDIC является стандартным IP -адресом в приложениях разработки FPGA, таких как Vivado для Xilinx, тогда как реализация степенного ряда не обусловлена ​​спецификой такого IP, т.е. CORDIC может вычислять множество различных функций (общего назначения), в то время как аппаратный умножитель, настроенный для выполнения реализаций степенного ряда, может вычислять только ту функцию, для которой он был разработан.

С другой стороны, когда доступен аппаратный умножитель ( например , в микропроцессоре DSP ), методы поиска по таблице и степенные ряды обычно работают быстрее, чем CORDIC. В последние годы алгоритм CORDIC широко использовался в различных биомедицинских приложениях, особенно в реализациях FPGA. [ нужна ссылка ]

В серии STM32G4 и некоторых микроконтроллерах серии STM32H7 реализован модуль CORDIC для ускорения вычислений в различных приложениях со смешанными сигналами, таких как графика для человеко-машинного интерфейса и ориентированное на поле управление двигателями. Хотя CORDIC не так быстр, как аппроксимация степенным рядом, он действительно быстрее, чем реализации на основе таблиц интерполяции, такие как те, которые предоставляются стандартными библиотеками ARM CMSIS и C. [54] Хотя результаты могут быть немного менее точными, поскольку предоставленные модули CORDIC обеспечивают точность результата только 20 бит. Например, большая часть разницы в производительности по сравнению с реализацией ARM связана с накладными расходами алгоритма интерполяции, который обеспечивает полную точность с плавающей запятой (24 бита) и, вероятно, может достичь относительной ошибки для этой точности. [55] Еще одним преимуществом является то, что модуль CORDIC является сопроцессором и может выполняться параллельно с другими задачами ЦП.

Проблема с использованием рядов Тейлора заключается в том, что, хотя они и обеспечивают небольшую абсолютную ошибку, они не демонстрируют хорошей относительной ошибки. [56] Для контроля обоих видов ошибок можно использовать другие средства полиномиальной аппроксимации, такие как минимаксная оптимизация.

Программное обеспечение

[ редактировать ]

Многие старые системы с процессорами, работающими только с целыми числами, в той или иной степени реализовали CORDIC как часть своих библиотек IEEE с плавающей запятой . Поскольку большинство современных ЦП общего назначения имеют регистры с плавающей запятой с обычными операциями, такими как сложение, вычитание, умножение, деление, синус, косинус, квадратный корень, журнал 10 , натуральный логарифм, необходимость реализации CORDIC в них с помощью программного обеспечения практически отсутствует. -существующий. Только микроконтроллеры или специальные приложения безопасности и ограниченного по времени программного обеспечения должны рассматривать возможность использования CORDIC.

Режимы работы

[ редактировать ]

Режим вращения

[ редактировать ]

CORDIC можно использовать для расчета ряда различных функций. В этом объяснении показано, как использовать CORDIC в режиме вращения для расчета синуса и косинуса угла, предполагая, что желаемый угол задан в радианах и представлен в формате с фиксированной точкой. Определить синус или косинус угла. , необходимо найти координату y или x точки на единичной окружности, соответствующей искомому углу. Используя CORDIC, можно было бы начать с вектора :

Иллюстрация работающего алгоритма CORDIC

В первой итерации этот вектор поворачивается на 45° против часовой стрелки, чтобы получить вектор . Последовательные итерации поворачивают вектор в том или ином направлении с шагом уменьшения размера, пока не будет достигнут желаемый угол. Угол каждого шага для .

Более формально, каждая итерация вычисляет поворот, который выполняется путем умножения вектора с матрицей вращения :

Матрица вращения определяется выражением

Используя тригонометрическое тождество :

косинусный коэффициент можно исключить, чтобы получить:

Выражение для повернутого вектора тогда становится:

где и являются компонентами . Установка угла для каждой итерации такой, что по-прежнему дает ряд, который сходится ко всем возможным выходным значениям. Таким образом, умножение на тангенс можно заменить делением на степень двойки, что эффективно выполняется в цифровом компьютерном оборудовании с использованием битового сдвига . Тогда выражение станет:

и используется для определения направления вращения: если угол положительно, то равно +1, в противном случае — −1.

Для замены косинуса можно использовать следующее тригонометрическое тождество:

,

давая этот множитель для каждой итерации:

The Затем факторы можно исключить из итеративного процесса и впоследствии применить все сразу с помощью масштабного коэффициента. :

которая рассчитывается заранее и сохраняется в таблице или в виде одной константы, если количество итераций фиксировано. Эту поправку можно также внести заранее, масштабируя и, следовательно, сохраняя умножение. Дополнительно можно отметить, что [43]

чтобы обеспечить дальнейшее снижение сложности алгоритма. Некоторые приложения могут не выполнять корректировку в целом, что приводит к выигрышу в обработке : [57]

После достаточного количества итераций угол вектора будет близок к желаемому. . Для большинства обычных целей 40 итераций ( n достаточно = 40), чтобы получить правильный результат с точностью до 10-го знака после запятой.

Остается только определить, должно ли вращение быть по или против часовой стрелки на каждой итерации (выбирая значение ). Это делается путем отслеживания того, насколько угол был повернут на каждой итерации, и вычитания этого значения из желаемого угла; то для того, чтобы приблизиться к нужному углу , если положительное значение, вращение происходит по часовой стрелке, в противном случае оно отрицательное, и вращение происходит против часовой стрелки:

Значения также должны быть предварительно вычислены и сохранены. Для малых углов его можно аппроксимировать выражением чтобы уменьшить размер таблицы.

Как видно на рисунке выше, синус угла - координата y конечного вектора а координата x — это значение косинуса.

Режим векторизации

[ редактировать ]

Алгоритм режима вращения, описанный выше, может вращать любой вектор (не только единичный вектор, выровненный вдоль оси x ) на угол от -90 ° до + 90 °. Решения о направлении вращения зависят от быть положительным или отрицательным.

Режим векторизации требует небольшой модификации алгоритма. Он начинается с вектора, координата x которого положительна, а координата y произвольна. Последовательные вращения имеют целью повернуть вектор к оси x (и, следовательно, уменьшить координату y до нуля). На каждом шаге значение y определяет направление вращения. Окончательное значение содержит полный угол поворота. Окончательное значение x будет величиной исходного вектора, масштабированного K . Итак, очевидным применением режима векторизации является преобразование прямоугольных координат в полярные.

Выполнение

[ редактировать ]

В Java класс Math имеет scalb(double x,int scale) метод выполнения такого сдвига, [58] C имеет функцию ldexp , [59] и процессоры класса x86 имеют fscale операция с плавающей запятой. [60]

Пример программного обеспечения (Python)

[ редактировать ]
from math import atan2, sqrt, sin, cos, radiansITERS = 16theta_table = [atan2(1, 2**i) for i in range(ITERS)]def compute_K(n):    """    Compute K(n) for n = ITERS. This could also be    stored as an explicit constant if ITERS above is fixed.    """    k = 1.0    for i in range(n):        k *= 1 / sqrt(1 + 2 ** (-2 * i))    return kdef CORDIC(alpha, n):    K_n = compute_K(n)    theta = 0.0    x = 1.0    y = 0.0    P2i = 1  # This will be 2**(-i) in the loop below    for arc_tangent in theta_table:        sigma = +1 if theta < alpha else -1        theta += sigma * arc_tangent        x, y = x - sigma * y * P2i, sigma * P2i * x + y        P2i /= 2    return x * K_n, y * K_nif __name__ == "__main__":    # Print a table of computed sines and cosines, from -90° to +90°, in steps of 15°,    # comparing against the available math routines.    print("  x       sin(x)     diff. sine     cos(x)    diff. cosine ")    for x in range(-90, 91, 15):        cos_x, sin_x = CORDIC(radians(x), ITERS)        print(            f"{x:+05.1f}°  {sin_x:+.8f} ({sin_x-sin(radians(x)):+.8f}) {cos_x:+.8f} ({cos_x-cos(radians(x)):+.8f})"        )
$ python cordic.py  x       sin(x)     diff. sine     cos(x)    diff. cosine-90.0°  -1.00000000 (+0.00000000) -0.00001759 (-0.00001759)-75.0°  -0.96592181 (+0.00000402) +0.25883404 (+0.00001499)-60.0°  -0.86601812 (+0.00000729) +0.50001262 (+0.00001262)-45.0°  -0.70711776 (-0.00001098) +0.70709580 (-0.00001098)-30.0°  -0.50001262 (-0.00001262) +0.86601812 (-0.00000729)-15.0°  -0.25883404 (-0.00001499) +0.96592181 (-0.00000402)+00.0°  +0.00001759 (+0.00001759) +1.00000000 (-0.00000000)+15.0°  +0.25883404 (+0.00001499) +0.96592181 (-0.00000402)+30.0°  +0.50001262 (+0.00001262) +0.86601812 (-0.00000729)+45.0°  +0.70709580 (-0.00001098) +0.70711776 (+0.00001098)+60.0°  +0.86601812 (-0.00000729) +0.50001262 (+0.00001262)+75.0°  +0.96592181 (-0.00000402) +0.25883404 (+0.00001499)+90.0°  +1.00000000 (-0.00000000) -0.00001759 (-0.00001759)

Пример оборудования

[ редактировать ]

Количество логических элементов для реализации CORDIC примерно сопоставимо с количеством, необходимым для умножителя, поскольку оба требуют комбинации сдвигов и сложений. Выбор реализации на основе множителя или CORDIC будет зависеть от контекста. Например, умножение двух комплексных чисел, представленных их действительными и мнимыми компонентами (прямоугольными координатами), требует 4 умножений, но может быть реализовано с помощью одного CORDIC, работающего с комплексными числами, представленными их полярными координатами, особенно если величина чисел не имеет значения (умножение комплексного вектора на вектор на единичной окружности фактически равнозначно вращению). CORDIC часто используются в схемах телекоммуникаций, таких как цифровые понижающие преобразователи .

Двойные итерации CORDIC

[ редактировать ]

В двух публикациях Владимира Байкова [61] [62] было предложено использовать метод двойных итераций для реализации функций: арксинус, арккосинус, натуральный логарифм, показательная функция, а также для расчета гиперболических функций. Метод двойной итерации заключается в том, что в отличие от классического метода CORDIC, где значение шага итерации меняется каждый раз, т.е. на каждой итерации, в методе двойной итерации значение шага итерации повторяется дважды и изменяется только через одну итерацию. Отсюда и появилось обозначение показателя степени для двойных итераций: . Тогда как с обычными итерациями: . Метод двойной итерации гарантирует сходимость метода во всем допустимом диапазоне изменения аргументов.

Обобщение задач сходимости CORDIC для произвольной позиционной системы счисления с основанием показал [63] что для функций синус, косинус, арктангенс достаточно выполнить итераций для каждого значения i (i = 0 или от 1 до n, где n — количество цифр), т.е. для каждой цифры результата. Для натурального логарифма, экспоненты, гиперболического синуса, косинуса и арктангенса: итерации должны выполняться для каждого значения . Для функций арксинус и арккосинус два итерации следует выполнять для каждой цифры числа, т.е. для каждого значения . [63]

Для обратных гиперболических функций синуса и аркосинуса количество итераций будет равно для каждого , то есть для каждой цифры результата.

[ редактировать ]

CORDIC является частью класса алгоритмов «сдвига и сложения» , как и логарифмические и экспоненциальные алгоритмы, полученные из работы Генри Бриггса. Другой алгоритм сдвига и сложения, который можно использовать для вычисления многих элементарных функций, — это алгоритм BKM , который представляет собой обобщение логарифмического и экспоненциального алгоритмов на комплексную плоскость. Например, BKM можно использовать для вычисления синуса и косинуса действительного угла. (в радианах) путем вычисления экспоненты , что . Алгоритм BKM немного сложнее, чем CORDIC, но имеет то преимущество, что ему не требуется коэффициент масштабирования ( K ).

См. также

[ редактировать ]
  1. ^ Jump up to: а б с Волдер, Джек Э. (3 марта 1959 г.). «Вычислительная техника CORDIC» (PDF) . Материалы Западной объединенной компьютерной конференции (WJCC) (презентация). Сан-Франциско, Калифорния, США: Национальный объединенный компьютерный комитет (NJCC): 257–261 . Проверено 2 января 2016 г.
  2. ^ Jump up to: а б Волдер, Джек Э. (25 мая 1959 г.). «Техника тригонометрических вычислений CORDIC» (PDF) . IRE-транзакции на электронных компьютерах . 8 (3). Институт радиоинженеров, Inc. (IRE) (опубликовано в сентябре 1959 г.): 330–334 (перепечатка: 226–230). EC-8(3):330–334. Архивировано из оригинала (PDF) 12 июня 2021 г. Проверено 1 января 2016 г.
  3. ^ Jump up to: а б Вальтер, Джон Стивен (май 1971 г.). Написано в Пало-Альто, Калифорния, США. «Единый алгоритм элементарных функций» (PDF) . Материалы весенней совместной компьютерной конференции . 38 . Атлантик-Сити, Нью-Джерси, США: Компания Hewlett-Packard : 379–385. Архивировано из оригинала (PDF) 12 июня 2021 г. Проверено 1 января 2016 г. - через Американскую федерацию обществ обработки информации (AFIPS).
  4. ^ Jump up to: а б Вальтер, Джон Стивен (июнь 2000 г.). «История единого CORDIC» . Журнал обработки сигналов СБИС . 25 (2 (Спецвыпуск по CORDIC)). Хингем, Массачусетс, США: Kluwer Academic Publishers : 107–112. дои : 10.1023/А:1008162721424 . ISSN   0922-5773 . S2CID   26922158 .
  5. ^ Jump up to: а б с Ло, Юаньюн; Ван, Юйсюань; Ха, Яджун; Ван, Чжунфэн; Чен, Сиюань; Пан, Хунбин (сентябрь 2019 г.). «Обобщенный гиперболический CORDIC и его логарифмические и экспоненциальные вычисления с произвольной фиксированной базой». Транзакции IEEE в системах очень большой интеграции (VLSI) . 27 (9): 2156–2169. дои : 10.1109/TVLSI.2019.2919557 . S2CID   196171166 .
  6. ^ Jump up to: а б Ло, Юаньюн; Ван, Юйсюань; Ха, Яджун; Ван, Чжунфэн; Чен, Сиюань; Пан, Хунбин (сентябрь 2019 г.). «Исправления к «Обобщенному гиперболическому CORDIC и его логарифмическим и экспоненциальным вычислениям с произвольной фиксированной базой» ». Транзакции IEEE в системах очень большой интеграции (VLSI) . 27 (9): 2222. doi : 10.1109/TVLSI.2019.2932174 . S2CID   201711001 .
  7. ^ Бриггс, Генри (1624). Арифметика Логарифмическая . Лондон. (Перевод: [1] Архивировано 4 марта 2016 г. в Wayback Machine )
  8. ^ Лапорт, Жак (2014) [2005]. «Генри Бриггс и HP 35» . Париж, Франция. Архивировано из оригинала 9 марта 2015 г. Проверено 2 января 2016 г. [2] Архивировано 10 августа 2020 г. на Wayback Machine.
  9. ^ Флауэр, Роберт (1771). Радикс. Новый способ вычисления логарифмов . Лондон: Дж. Бикрофт . Проверено 2 января 2016 г.
  10. ^ Jump up to: а б с Волдер, Джек Э. (15 июня 1956 г.), Алгоритмы двоичных вычислений для вращения координат и генерации функций (внутренний отчет), Convair , Группа аэроэлектроники, IAR-1.148
  11. ^ Jump up to: а б с д и ж г час я дж к л Волдер, Джек Э. (июнь 2000 г.). «Рождение CORDIC» (PDF) . Журнал обработки сигналов СБИС . 25 (2 (Спецвыпуск по CORDIC)). Хингем, Массачусетс, США: Kluwer Academic Publishers : 101–105. дои : 10.1023/А:1008110704586 . ISSN   0922-5773 . S2CID   112881 . Архивировано из оригинала (PDF) 4 марта 2016 г. Проверено 2 января 2016 г.
  12. ^ Перл, Майкл Д. (июнь 1971 г.), «Техника CORDIC уменьшает поиск тригонометрических функций», Computer Design , Бостон, Массачусетс, США: Computer Design Publishing Corp.: 72–78 (NB. Некоторые источники ошибочно называют это PZ Perle или в компонентном дизайне .)
  13. ^ Jump up to: а б с д и Шмид, Герман (1983) [1974]. Десятичные вычисления (1 (переиздание) изд.). Малабар, Флорида, США: Издательская компания Роберта Э. Кригера. стр. 162, 165–176, 181–193. ISBN  0-89874-318-4 . Проверено 03 января 2016 г. (Примечание. По крайней мере, в некоторых партиях этого репринтного издания были опечатки с дефектными страницами 115–146.)
  14. ^ Даггетт, Дэн Х. (сентябрь 1959 г.). «Десятично-двоичные преобразования в CORDIC» . IRE-транзакции на электронных компьютерах . 8 (3). Институт радиоинженеров, Inc. (IRE): 335–339. дои : 10.1109/TEC.1959.5222694 . ISSN   0367-9950 . EC-8(3):335–339 . Проверено 2 января 2016 г.
  15. ^ Группа Advanced Systems (6 августа 1962 г.), Техническое описание врезного оборудования для ремонта (отчет), Форт-Уэрт, Техас, США: General Dynamics , FZE-052
  16. ^ Jump up to: а б Шмид, Герман (1974). Десятичные вычисления (1-е изд.). Бингемтон, Нью-Йорк, США: John Wiley & Sons, Inc., стр. 162 , 165–176, 181–193. ISBN  0-471-76180-Х . Проверено 03 января 2016 г. До сих пор было известно, что CORDIC реализуется только в двоичной форме. Но, как будет показано здесь, алгоритм можно легко модифицировать для десятичной системы.* […] *Тем временем стало известно, что Hewlett-Packard и другие производители калькуляторов используют десятичную технику CORDIC в своих научных калькуляторах.
  17. ^ Jump up to: а б с д Лейбсон, Стивен (2010). «Проект HP 9100: экзотермическая реакция» . Проверено 2 января 2016 г.
  18. ^ Jump up to: а б с Меггитт, Джон Э. (29 августа 1961 г.). «Псевдоделение и процессы псевдоумножения» (PDF) . Журнал исследований и разработок IBM . 6 (2). Ривертон, Нью-Джерси, США: IBM Corporation (опубликовано в апреле 1962 г.): 210–226, 287. doi : 10.1147/rd.62.0210 . Архивировано из оригинала (PDF) 4 февраля 2022 г. Проверено 9 января 2016 г. Джон Э. Меггитт, бакалавр искусств, 1953 год; Доктор философии, 1958 год, Кембриджский университет . Награжден Первой премией Смита в Кембридже в 1955 году и избран научным сотрудником в Эммануэль-колледже . […] Присоединился к Британской лаборатории IBM в Херсли, Винчестер, в 1958 году. Интересы включают коды, исправляющие ошибки , и небольшие микропрограммные компьютеры. ( [3] , [4] )
  19. ^ Jump up to: а б с Кокран, Дэвид С. (19 ноября 2010 г.). «Четверть века в HP» (машинописный текст интервью). Музей истории компьютеров / Воспоминания HP. 7: Научные калькуляторы, около 1966 г. CHM X5992.2011 . Проверено 2 января 2016 г. Я даже прилетел в Южную Калифорнию, чтобы поговорить с Джеком Волдером, реализовавшим трансцендентальные функции в машине Афина , и проговорил с ним около часа. Он отослал меня к оригинальным статьям Меггитта, где он получил псевдоделение и псевдоумножение обобщенных функций. […] Я провел немало литературных исследований, приведших к некоторым очень интересным открытиям. […] Я нашел трактат Генри Бриггса 1624 года , в котором обсуждается вычисление десятичных логарифмов, в котором, что интересно, используется тот же метод псевдоделения/псевдоумножения, который Макмиллан и Волдер использовали в «Афине» . […] Мы приобрели LOCI-2 в Wang Labs и узнали, что Wang Labs LOCI II использует один и тот же алгоритм для извлечения квадратного корня, а также логарифмического и экспоненциального анализа. После появления модели 9100 наш юридический отдел получил письмо от Ванга, в котором говорилось, что мы нарушили их патент. И я только что отправил ответное письмо со ссылкой на Бриггса на латыни, и там было написано: «Похоже, предшествующий уровень техники для меня». Мы никогда не слышали больше ни слова. ( [5] )
  20. ^ Jump up to: а б Кокран, Дэвид С. (14 марта 1966), Об использовании CORDIC для вычисления трансцендентных функций в BCD (частное общение с Джеком Э. Волдером)
  21. ^ Jump up to: а б Осборн, Томас Э. (2010) [1994]. «История Тома Осборна его собственными словами» . Проверено 1 января 2016 г.
  22. ^ Лейбсон, Стивен (2010). «HP 9100: Первое путешествие» . Проверено 2 января 2016 г.
  23. ^ Кокран, Дэвид С. (сентябрь 1968 г.). «Внутреннее программирование калькулятора 9100A» . Журнал Hewlett-Packard . Пало-Альто, Калифорния, США: Hewlett-Packard : 14–16 . Проверено 2 января 2016 г. ( [6] )
  24. ^ Расширьте свою персональную вычислительную мощность с помощью нового логарифмического вычислительного прибора LOCI-1 , Wang Laboratories, Inc. , 1964, стр. 2–3 , получено 3 января 2016 г.
  25. ^ Бенсене, Рик (31 августа 2013 г.) [1997]. «Ванг LOCI-2» . Веб-музей старого калькулятора . Биверкрик, Орегон-Сити, Орегон, США . Проверено 03 января 2016 г.
  26. ^ «Руководство по обслуживанию Wang LOCI» (PDF) . Wang Laboratories, Inc., 1967. L55-67 . Проверено 14 сентября 2018 г.
  27. ^ Бенсене, Рик (23 октября 2004 г.) [1997]. «Калькуляторная система Wang Model 360SE» . Веб-музей старого калькулятора . Биверкрик, Орегон-Сити, Орегон, США . Проверено 03 января 2016 г.
  28. ^ Jump up to: а б с д Кокран, Дэвид С. (июнь 2010 г.). «Дизайн HP-35: пример инноваций» . Проект памяти HP . Проверено 2 января 2016 г. Во время разработки настольного калькулятора HP 9100 я отвечал за разработку алгоритмов, соответствующих архитектуре, предложенной Томом Осборном. Хотя предложенная методология для алгоритмов исходила от Малкольма Макмиллана, я много читал, чтобы понять основные расчеты […] Хотя Wang Laboratories использовала аналогичные методы расчета, мое исследование обнаружило предшествующий уровень техники, датированный 1624 годом, который читается в их патентах. […] Это исследование позволило адаптировать трансцендентные функции за счет использования алгоритмов для соответствия потребностям клиента в рамках ограничений аппаратного обеспечения. Это оказалось неоценимым во время разработки HP -35 , […] Степенные ряды , полиномиальные разложения , цепные дроби и полиномы Чебышева — все они рассматривались для трансцендентных функций. Все они были слишком медленными из-за количества необходимых операций умножения и деления. Обобщенным алгоритмом, который лучше всего соответствовал требованиям скорости и эффективности программирования для HP-35, был итерационный метод псевдоделения и псевдоумножения, впервые описанный в 1624 году Генри Бриггса в « Логарифмической арифметике », а затем Волдера и Меггитта. Это тот же тип алгоритма, который использовался в предыдущих настольных калькуляторах HP. […] Сложность алгоритмов сделала необходимость многоуровневого программирования. Это означало, что калькулятор должен был иметь возможности подпрограмм, […] Чтобы сгенерировать трансцендентную функцию, такую ​​​​как Arc-Hyperbolic-Tan, требовалось несколько уровней подпрограмм. […] Крис Клэр позже задокументировал это как методологию алгоритмического конечного автомата (ASM). Даже простой синус или косинус использовал процедуру Tangent, а затем вычислял синус на основе тригонометрических тождеств. Эти трудные манипуляции были необходимы, чтобы свести к минимуму количество уникальных программ и шагов программы […] Набор арифметических команд был разработан специально для десятичного калькулятора трансцендентных функций. Основные арифметические операции выполняются сумматором -вычитателем с дополнением до 10 , который имеет пути данных к трем регистрам, которые используются в качестве рабочей памяти.
  29. ^ Патент США 3402285A , Ван, Ань , «Счетный аппарат», опубликован 17 сентября 1968 г., выдан 17 сентября 1968 г., передан Wang Laboratories   ( [7] , [8] ).
  30. ^ Патент DE 1499281B1 , Ван, Ань , "Rechenmaschine fuer logarithmische Rechnungen", опубликован 6 мая 1970 г., выдан 6 мая 1970 г., передан Wang Laboratories   ( [9] ).
  31. ^ Шварцландер-младший, Эрл Э. (1990). Компьютерная арифметика . Том. 1 (2-е изд.). Лос-Аламитос: Издательство компьютерного общества IEEE . ISBN  9780818689314 . 0818689315 . Проверено 2 января 2016 г.
  32. ^ Петрочелли, Орландо Р., изд. (1972), Лучшие компьютерные статьи 1971 года , Auerbach Publishers , стр. 71, ISBN  0877691274 , получено 2 января 2016 г.
  33. ^ Кокран, Дэвид С. (июнь 1972 г.). «Алгоритмы и точность в HP-35» (PDF) . Журнал Hewlett-Packard . 23 (10): 10–11. Архивировано из оригинала (PDF) 4 октября 2013 г. Проверено 2 января 2016 г.
  34. ^ Лапорт, Жак (6 декабря 2005 г.). «Тригонометрический алгоритм HP35» . Париж, Франция. Архивировано из оригинала 9 марта 2015 г. Проверено 2 января 2016 г. [10] Архивировано 10 августа 2020 г. в Wayback Machine.
  35. ^ Лапорт, Жак (февраль 2005 г.) [1981]. «Тайна алгоритмов» . L'Ordinateur Individuel (24). Париж, Франция. Архивировано из оригинала 18 августа 2016 г. Проверено 2 января 2016 г. [11] Архивировано 12 июня 2021 г. в Wayback Machine.
  36. ^ Лапорт, Жак (февраль 2012 г.) [2006]. «Поцифровые методы» . Париж, Франция. Архивировано из оригинала 18 августа 2016 г. Проверено 2 января 2016 г. [12] Архивировано 12 июня 2021 г. в Wayback Machine.
  37. ^ Лапорт, Жак (февраль 2012 г.) [2007]. «Алгоритм логарифма HP 35» . Париж, Франция. Архивировано из оригинала 18 августа 2016 г. Проверено 7 января 2016 г. [13] Архивировано 10 августа 2020 г. в Wayback Machine.
  38. ^ Ван, Юйсюань; Ло, Юаньюн; Ван, Чжунфэн; Шен, Цинхун; Пан, Хунбин (январь 2020 г.). «Архитектура на основе GH CORDIC для вычисления корня N из чисел с плавающей запятой одинарной точности». Транзакции IEEE в системах очень большой интеграции (VLSI) . 28 (4): 864–875. дои : 10.1109/TVLSI.2019.2959847 . S2CID   212975618 .
  39. ^ Мопури, Суреш; Ачарья, Амит (сентябрь 2019 г.). «Методология проектирования общей архитектуры СБИС низкой сложности для вычислений N-го корня и N-й степени». Транзакции IEEE в схемах и системах I: Регулярные статьи . 66 (12): 4673–4686. дои : 10.1109/TCSI.2019.2939720 . S2CID   203992880 .
  40. ^ Вачхани, Лина (ноябрь 2019 г.). «CORDIC как переключаемая нелинейная система». Схемы, системы и обработка сигналов . 39 (6): 3234–3249. дои : 10.1007/s00034-019-01295-8 . S2CID   209904108 .
  41. ^ Шмид, Герман ; Богацкий, Энтони (20 февраля 1973 г.). «Используйте десятичный CORDIC для генерации многих трансцендентных функций». ЭДН : 64–73.
  42. ^ Франке, Ричард (8 мая 1973 г.). Анализ алгоритмов аппаратной оценки элементарных функций (PDF) . Монтерей, Калифорния, США: Военно-морской факультет , Военно-морская аспирантура . НПС-53ФЭ73051А . Проверено 03 января 2016 г.
  43. ^ Jump up to: а б с д и Мюллер, Жан-Мишель (2006). Элементарные функции: алгоритмы и реализация (2-е изд.). Бостон: Биркхойзер . п. 134. ИСБН  978-0-8176-4372-0 . LCCN   2005048094 . Проверено 1 декабря 2015 г.
  44. ^ Jump up to: а б Нейв, Рафи (март 1983 г.). «Реализация трансцендентных функций на числовом процессоре». Микропроцессинг и микропрограммирование . 11 (3–4): 221–225. дои : 10.1016/0165-6074(83)90151-5 .
  45. ^ Палмер, Джон Ф.; Морс, Стивен Пол (1984). Букварь 8087 (1-е изд.). Джон Вили и сыновья Австралия, Лимитед . ISBN  0471875694 . 9780471875697 . Проверено 2 января 2016 г.
  46. ^ Гласс, Л. Брент (январь 1990 г.). «Математические сопроцессоры: взгляд на то, что они делают и как они это делают». Байт . 15 (1): 337–348. ISSN   0360-5280 .
  47. ^ Jump up to: а б с Джарвис, Питтс (1 октября 1990 г.). «Реализация алгоритмов CORDIC — единая компактная процедура для вычисления трансцендентных функций» . Журнал доктора Добба : 152–156. Архивировано из оригинала 4 марта 2016 г. Проверено 2 января 2016 г.
  48. ^ Jump up to: а б Юэнь, АК (1988). «Процессоры Intel с плавающей запятой». Протокол конференции Electro/88 : 48/5/1–7.
  49. ^ Мехер, Прамод Кумар; Вальс, Хавьер; Хуанг, Цо-Бинг; Шридхаран, К.; Махаратна, Кошик (22 августа 2008 г.). «50 лет CORDIC: алгоритмы, архитектуры и приложения» (PDF) . Транзакции IEEE в схемах и системах I: Регулярные статьи . 56 (9) (опубликовано 9 сентября 2009 г.): 1893–1907. дои : 10.1109/TCSI.2009.2025803 . S2CID   5465045 .
  50. ^ Мехер, Прамод Кумар; Пак, Сан Юн (февраль 2013 г.). «Методология проектирования общей архитектуры СБИС низкой сложности для вычислений N-го корня и N-й степени». Транзакции IEEE в системах очень большой интеграции (VLSI) . 21 (2): 217–228. дои : 10.1109/TVLSI.2012.2187080 . S2CID   7059383 .
  51. ^ Хеффрон, В.Г.; ЛаПиана, Ф. (11 декабря 1970 г.). «Технический меморандум 70-2014-8: Навигационная система лунного вездехода» (PDF) . НАСА . Вашингтон, округ Колумбия, США: Bellcomm . п. 14.
  52. ^ Смит, Эрнест К.; Мастин, Уильям К. (ноябрь 1973 г.). «Техническая записка D-7469: Обзор характеристик навигационной системы лунного вездехода» (PDF) . НАСА . Хантсвилл, Алабама, США: Центр космических полетов Маршалла . п. 17.
  53. ^ Ширрифф, Кен (май 2020 г.). «Извлечение констант ПЗУ из кристалла математического сопроцессора 8087» . righto.com . Проверено 3 сентября 2020 г. ПЗУ содержит 16 значений арктангенсов, арктангенсы 2 -n . Он также содержит 14 значений журнала, журналы по основанию 2 (1+2). -n ). Эти значения могут показаться необычными, но они используются в эффективном алгоритме CORDIC, изобретенном в 1958 году.
  54. ^ «Начало работы с ускорителем CORDIC с использованием пакета MCU STM32CubeG4» (PDF) . СТМикроэлектроника . Проверено 1 января 2021 г.
  55. ^ «CMSIS/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_f32.c» . Гитхаб . РУКА . Проверено 1 января 2021 г.
  56. ^ «Границы ошибок разложения Тейлора для синуса» . Математический обмен стеками . Проверено 1 января 2021 г.
  57. ^ Андрака, Рэй (1998). «Обзор алгоритмов CORDIC для компьютеров на базе FPGA» (PDF) . АКМ . Норт-Кингстаун, Род-Айленд, США: Andraka Consulting Group, Inc. 0-89791-978-5/98/01 . Проверено 8 мая 2016 г.
  58. ^ «Класс математики» . Стандарт платформы Java (8-е изд.). Корпорация Оракл . 2018 [1993]. Архивировано из оригинала 6 августа 2018 г. Проверено 6 августа 2018 г.
  59. ^ «ldexp, ldexpf, ldexpl» . cppreference.com . 11 июня 2015 г. Архивировано из оригинала 6 августа 2018 г. Проверено 6 августа 2018 г.
  60. ^ «Раздел 8.3.9 Логарифмический, экспоненциальный и масштабный». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 1: Базовая архитектура (PDF) . Корпорация Интел . Сентябрь 2016. стр. 8–22.
  61. ^ Байков Владимир. «Краткий обзор (автореферат) моей докторской диссертации, опубликованный в 1972 году» . байков.де . Проверено 03 мая 2023 г.
  62. ^ Байков Владимир. «Аппаратная реализация элементарных функций компьютеров» . байков.де . Проверено 03 мая 2023 г.
  63. ^ Jump up to: а б Байков Владимир. «Процессоры специального назначения: итерационные алгоритмы и структуры» . байков.де . Проверено 03 мая 2023 г.

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 479e63925563c9c5ff75752346df216c__1722385260
URL1:https://arc.ask3.ru/arc/aa/47/6c/479e63925563c9c5ff75752346df216c.html
Заголовок, (Title) документа по адресу, URL1:
CORDIC - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)