реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> извлечение корня из суммы квадратов sqrt( I^2 + Q^2), floating-point
beaRTS
сообщение Dec 22 2012, 15:40
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111



сколько ни лазил по форуму, видел кучу ссылок по поводу извлечения корня из целых чисел. Обсуждать fixed-point и не хочется, т.к. у Техасцев есть на этот случай библиотека IQMath (работаю сейчас с камнями TI).
я же задался целью написать немного по-своему извлечение корня из sqrt( I^2 + Q^2) (это в цифровом детекторе понадобится) для случая float-point.

по поводу идейки - писал здесь

Собранная статистика в приложении.
сравнивал работу написанной функции с функцией из <cmath> и в нее передавал уже заранее вычисленное выражение I^2+Q^2. в свою же функцию передаю I и Q. (все значения типа float)
интересует все ли норм? приемлемо ли я проверяю работу?
Посчитана относительная и абсолютная ошибка. Скажите ее порядок хотя бы правдоподобен ? Вот в этом сообщении писалось о моем случае и ошибка там 0,007 % . У меня максимальная ошибка 0.000766161 %.

в общем, что скажете? что, может, стоит выложить, обнародовать - говорите, сделаю.

Сообщение отредактировал beaRTS - Dec 22 2012, 17:00
Прикрепленные файлы
Прикрепленный файл  sqrt_iterations_log.txt ( 12.66 килобайт ) Кол-во скачиваний: 88
 


--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 22 2012, 17:16
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



А теперь объясните, зачем создавать аналогичную тему, а не продолжить в той же самой, на которую ссылаетесь?
Go to the top of the page
 
+Quote Post
beaRTS
сообщение Dec 22 2012, 17:24
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111



Цитата(Serg76 @ Dec 22 2012, 21:16) *
А теперь объясните, зачем создавать аналогичную тему, а не продолжить в той же самой, на которую ссылаетесь?

чтоб ту не захламлять.. т.к. в той теме обсуждаются вопросы целочисленных данных. а я со своими вещественными - ни к селу ни к городу. да и создаю то я не тупо sqrt( X), а sqrt( I, Q), т.е. людям, которым интересно применение корня в цифровых детекторах сэкономят уйму времени, найдя сразу мою тему, чем читая многочисленные темы, где обсуждаются целые числа и ровно нуль по поводу floating-point.

P.S. я то, видя что Вы пишете, надеялся что вы скажете что-то дельное....


--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 22 2012, 17:33
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(beaRTS @ Dec 22 2012, 21:24) *
чтоб ту не захламлять.. т.к. в той теме обсуждаются вопросы целочисленных данных. а я со своими вещественными - ни к селу ни к городу. да и создаю то я не тупо sqrt( X), а sqrt( I, Q), т.е. людям, которым интересно применение корня в цифровых детекторах сэкономят уйму времени, найдя сразу мою тему, чем читая многочисленные темы, где обсуждаются целые числа и ровно нуль по поводу floating-point.

P.S. я то, видя что Вы пишете, надеялся что вы скажете что-то дельное....

ну понято в общем, захламили вы этот форум порядочно. я тоже сидел и надеялся, когда же вы все-таки напишете что-то по делу и перестаните прыгать по форуму, оставляя в большей массе своей бесполезные комментарии, не несущие никакой смысловой нагрузки. bb-offtopic.gif

Сообщение отредактировал Serg76 - Dec 22 2012, 17:35
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 22 2012, 17:33
Сообщение #5





Guests






Непонятно, что Вас смущает.
Если Вас устраивает точность и время - зачем "толочь воду в ступе"?
Go to the top of the page
 
+Quote Post
beaRTS
сообщение Dec 23 2012, 05:39
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111



Цитата(Serg76 @ Dec 22 2012, 20:33) *
ну понято в общем, захламили вы этот форум порядочно.

вы не объективны. Есть люди на форуме, которые были мне благодарны за помощь и я рад что помог кому-то.... И с чего я захламил? Почитайте темы на форуме, в которых вы, опытные, устраиваете холивары, путаете мозги молодежи и по-большому юлите, но не отвечаете на вопросы. (например темы С++ против Си и т.д.)
Не нравится - не читайте, обходите стороной.

я считаю моя тема имеет узкую специализацию - поэтому новая тема - все вопрос закрыт!

Цитата(TSerg @ Dec 22 2012, 20:33) *
Непонятно, что Вас смущает.
Если Вас устраивает точность и время - зачем "толочь воду в ступе"?

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

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

давайте закроем этот холивар. я я постарался объяснить.
и теперь предпочтительно писать по делу!

Сообщение отредактировал beaRTS - Dec 23 2012, 06:25


--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 23 2012, 10:08
Сообщение #7





Guests






>а вы обсирать молодежь, тянущуюся к знаниям, принялись...

Где Вы такое нашли в моих ответах?
Насколько помню, я Вам давал технический материалsm.gif

Что же касается поиска наилучшего решения, то есть известная поговорка, да не одна:
"Лучшее - враг хорошего", "Если работает - не трогай" и т.д.

Ну и заниматься вместе с вами числовыми изысканиями вряд кто будет.
Есть конкретный вопрос - задавайте максимально лаконично.
Результат приводите в наиболее общем виде, а не выкатывайте простыни логов.
И т.д.

P.S.
То, что Вы молоды - это не избавляет от необходимости чтения талмудов, а не лазания по форумам.
Так, что берите в руки книжки и вперед.
Например, Благовещенский, "Вычисление элементарных функций на ЭВМ"

Или не менее занимательные изыски по вычислению обратного корня от Silicon Graphics:
http://www.codemaestro.com/reviews/9
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 23 2012, 10:17
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(beaRTS @ Dec 23 2012, 09:39) *
вы не объективны. Есть люди на форуме, которые были мне благодарны за помощь и я рад что помог кому-то.... И с чего я захламил? Почитайте темы на форуме, в которых вы, опытные, устраиваете холивары, путаете мозги молодежи и по-большому юлите, но не отвечаете на вопросы. (например темы С++ против Си и т.д.)
Не нравится - не читайте, обходите стороной.

я считаю моя тема имеет узкую специализацию - поэтому новая тема - все вопрос закрыт!

ну что же, попробую еще раз объяснить.
во-первых, прежде, чем создавать посты, а тем более новые темы, неплохо было бы разведать, что по этому вопросу уже обсуждалось, для чего элементарно научиться пользоваться поиском (это рекомендация администрации форума), коим вы пользоваться не умеете или, я подозреваю, просто игнорируете. потому, что все основные "проблемы", которые вы здесь подымали, элементарно находятся через поиск.

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

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

думаю этого хватит пока.

P.S. Да, и судя по вашему жизненному девизу: "Об уме человека вернее судить по его вопросам, нежели по его ответам", пока это не про ВАС.

Сообщение отредактировал Serg76 - Dec 23 2012, 11:00
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Dec 25 2012, 21:50
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



QUOTE (beaRTS @ Dec 23 2012, 09:39) *
и теперь предпочтительно писать по делу!
Вы провели большую и никому не нужную работу по доказательсту в сотый раз очевидного факта крайней неэффективности линейного метода вычисления квадратного корня по сравнению с методом Ньютона-Рафсона.

Неэффективность по числу итераций (для одинарной точности) 40/2 = 20, поскольку метод Н-Р сходится за две итерации из первого приближения известного с точностью 8 двоичных знаков (результат инструкции EISQRTF32).

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

Вследствие хорошей аппаратной реализации основных трёх арифметических операций, точность метода Н-Р лучше по сравнению с линейным методом, где дополнительная погрешность вносится программно организованной операцией деления.

По-прежнему не решён вопрос о переполнении/обнулении промежуточного результата - хотя это нельзя вам поставить в вину. Имеется ввиду, что при определённых условиях сумма квадратов может переполнится или обнулится, хотя корень из неё представим ненулевым числом в диапазоне чисел с плавающей точкой. С этой же проблемой тесно связано численное обнуление одного из квадратов слагаемых, в результате дающее корень равный большему модулю из (A,B), в то время как корень из их суммы квадратов представим числом с плавающей точкой.

Резюме - "Всё украдено до нас", "незачем изобретать велосипед", используйте библиотечную подпрограмму.
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Dec 26 2012, 06:23
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(beaRTS @ Dec 22 2012, 18:40) *
...извлечение корня из sqrt( I^2 + Q^2)...

Я бы для этого случая использовал CORDIC (алгоритм Волдера), где I и Q квадратуры...
Да и FPGA, если нужна предельная скорость. Результаты моделирования для одноактного устройства на FPGA дали на все 70 нс, это для 16 разрядного результата ...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 17:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016