|
|
  |
Арифметика с фиксированной точкой, помогите понять несколько ньюансов |
|
|
|
Mar 6 2008, 01:17
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-01-08
Из: Санкт-Петербург
Пользователь №: 34 012

|
есть два беззнаковых 19разрядных числа x и y необходимо вычислить следующее выражение: z = (3*pi/2) + arctan(x/y)
насколько я понимаю арктангенс соответственно вычислять нужно раскладывая его в ряд тейлора результат 32 битный
вопросы следующие:
1) до какого члена нужно(имеет смысл) раскладывать в ряд арктангенс ? 2) как реализуеться операция x/y в числах с фиксированной точкой? также как и с целыми?
если не сложно напишите пожалуйста поподробнее
|
|
|
|
|
Mar 6 2008, 06:20
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604

|
Цитата(onizuka @ Mar 6 2008, 05:17)  1) до какого члена нужно(имеет смысл) раскладывать в ряд арктангенс ? 2) как реализуеться операция x/y в числах с фиксированной точкой? также как и с целыми? 1. Это зависит от желаемой точности и от значения аргумента, который определяет скорость схождения. Текущая точность вычисляется после добавления к сумме разложения каждого следующего члена ряда. Однако, разложение в ряд Тейлора не самый лучший способ вычисления тангенса, есть более прогрессивные алгоритмы, об этом здесь уже говорилось, например, CORDIC ("цифра за цифрой"). 2. Это не важно, здесь дело вкуса. Желательно только, чтобы делитель был больше делимого, для этого делают дополнительные сдвиги операндов, а потом учитывают это при выравнивании частного. Вам правильно задали вопрос, по поводу места реализации.
|
|
|
|
|
Mar 6 2008, 07:15
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(608 @ Mar 6 2008, 09:20)  1. Это зависит от желаемой точности и от значения аргумента, который определяет скорость схождения. Текущая точность вычисляется после добавления к сумме разложения каждого следующего члена ряда. Однако, разложение в ряд Тейлора не самый лучший способ вычисления тангенса, есть более прогрессивные алгоритмы, об этом здесь уже говорилось, например, CORDIC ("цифра за цифрой"). Автор спрашивал(а) не про тангенс, а про арктангенс, ряд для которого сходится со свистом...
|
|
|
|
|
Mar 6 2008, 07:26
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(onizuka @ Mar 6 2008, 04:17)  есть два беззнаковых 19разрядных числа x и y необходимо вычислить следующее выражение: z = (3*pi/2) + arctan(x/y)
насколько я понимаю арктангенс соответственно вычислять нужно раскладывая его в ряд тейлора результат 32 битный
вопросы следующие:
1) до какого члена нужно(имеет смысл) раскладывать в ряд арктангенс ? 2) как реализуеться операция x/y в числах с фиксированной точкой? также как и с целыми?
если не сложно напишите пожалуйста поподробнее 1. Зависит от точности, предъявляемой к результату. Если я правильно понял, x и y могут быть любыми, кроме y=0. 2. Так же. Цитата(Tanya @ Mar 6 2008, 10:15)  Автор спрашивал(а) не про тангенс, а про арктангенс, ряд для которого сходится со свистом... Что значит "со свистом"? Автор спрашивал(а) не про свист, а "до какого члена нужно(имеет смысл) раскладывать в ряд арктангенс".
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Mar 6 2008, 08:00
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(Stanislav @ Mar 6 2008, 10:26)  1. Зависит от точности, предъявляемой к результату. Если я правильно понял, x и y могут быть любыми, кроме y=0. 2. Так же.
Что значит "со свистом"? Автор спрашивал(а) не про свист, а "до какого члена нужно(имеет смысл) раскладывать в ряд арктангенс". А свист был не автору, а соавтору, написавшему про плохую сходимость тангенса, что действительно имеет место вдали от нуля... ближе к пи пополам. А Вам замечу, что в подобной постановке задачи при y=0 арктангенс будет равен пипополаму. А как вычислять - пусть автор сам решает - это зависит от методов и вкуса. В ряд можно раскладывать, танцуя от нуля. А можно и не от нуля... И не обязательно по положительным степеням аргумента...
|
|
|
|
|
Mar 6 2008, 08:35
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604

|
Цитата(Tanya @ Mar 6 2008, 12:00)  А свист был не автору, а соавтору, написавшему про плохую сходимость тангенса, что действительно имеет место вдали от нуля... ближе к пи пополам. Я допустил опечатку (правильно арктангенс), и спор пошел не в ту сторону... Для вычисления арктангенса рекомендуется использовать алгоритм "цифра за цифрой". Отпадают все вопросы с делениями, да и каждая итерация позволяет вычислять как бы одну точную цифру результата. А для оптимального решения задачи, опять же, нужно знать, чем исходное выражение будет вычисляться. Возможно, хватит и готовой таблицы...
Сообщение отредактировал 608 - Mar 6 2008, 09:19
|
|
|
|
|
Mar 6 2008, 12:18
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-01-08
Из: Санкт-Петербург
Пользователь №: 34 012

|
Цитата(eugen_pcad_ru @ Mar 6 2008, 08:54)  Реализация в ПЛИС, процессоре, микроконтроллере? Реализация в ПЛИС( 25k LE ). насколько отличается рещение CORDIC по требуемому количеству элементов и быстродействию? Просто это лишь микроскопическая часть всего алгоритма. При этом туда еще нужно умудриться ну очень много уместить. а арктангенс нужно вычислять только в первом октанте
|
|
|
|
|
Mar 6 2008, 13:22
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604

|
Цитата(onizuka @ Mar 6 2008, 16:18)  Реализация в ПЛИС( 25k LE ). насколько отличается рещение CORDIC по требуемому количеству элементов и быстродействию? Просто это лишь микроскопическая часть всего алгоритма. При этом туда еще нужно умудриться ну очень много уместить.
а арктангенс нужно вычислять только в первом октанте Сколько времени отводится на одно вычисление? Для медленного, итерационного, навскидку, хватит 100..200 LE. Для очень быстрого, аппаратного до 1500 LE. Говорят, есть готовая корка. Если ее достать нельзя, то надо выбрать CORDIC- алгоритм: или Волдера или Меджита. Следующие этапы - моделирование, потом синтез. Исходные данные всегда приводят к первому квадранту, потом вводятся поправки на квадрант.
|
|
|
|
|
Mar 6 2008, 13:51
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-01-08
Из: Санкт-Петербург
Пользователь №: 34 012

|
Цитата(608 @ Mar 6 2008, 16:22)  Сколько времени отводится на одно вычисление? Для медленного, итерационного, навскидку, хватит 100..200 LE. Для очень быстрого, аппаратного до 1500 LE. Говорят, есть готовая корка. Если ее достать нельзя, то надо выбрать CORDIC- алгоритм: или Волдера или Меджита. Следующие этапы - моделирование, потом синтез. Исходные данные всегда приводят к первому квадранту, потом вводятся поправки на квадрант. на одно вычисление <400 нс
|
|
|
|
|
Mar 6 2008, 14:10
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604

|
Цитата(onizuka @ Mar 6 2008, 17:51)  на одно вычисление <400 нс Похоже, нужен конвейер...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|