Jump to content

    
Sign in to follow this  
beaRTS

извлечение корня из суммы квадратов sqrt( I^2 + Q^2)

Recommended Posts

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

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

 

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

 

Собранная статистика в приложении.

сравнивал работу написанной функции с функцией из <cmath> и в нее передавал уже заранее вычисленное выражение I^2+Q^2. в свою же функцию передаю I и Q. (все значения типа float)

интересует все ли норм? приемлемо ли я проверяю работу?

Посчитана относительная и абсолютная ошибка. Скажите ее порядок хотя бы правдоподобен ? Вот в этом сообщении писалось о моем случае и ошибка там 0,007 % . У меня максимальная ошибка 0.000766161 %.

 

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

sqrt_iterations_log.txt

Edited by beaRTS

Share this post


Link to post
Share on other sites
А теперь объясните, зачем создавать аналогичную тему, а не продолжить в той же самой, на которую ссылаетесь?

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

 

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

Share this post


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

 

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

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

Edited by Serg76

Share this post


Link to post
Share on other sites
ну понято в общем, захламили вы этот форум порядочно.

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

Не нравится - не читайте, обходите стороной.

 

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

 

Непонятно, что Вас смущает.

Если Вас устраивает точность и время - зачем "толочь воду в ступе"?

по поводу "что смущает" и "воду в ступе":

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

 

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

 

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

и теперь предпочтительно писать по делу!

Edited by beaRTS

Share this post


Link to post
Share on other sites
Guest TSerg

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

 

Где Вы такое нашли в моих ответах?

Насколько помню, я Вам давал технический материал:)

 

Что же касается поиска наилучшего решения, то есть известная поговорка, да не одна:

"Лучшее - враг хорошего", "Если работает - не трогай" и т.д.

 

Ну и заниматься вместе с вами числовыми изысканиями вряд кто будет.

Есть конкретный вопрос - задавайте максимально лаконично.

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

И т.д.

 

P.S.

То, что Вы молоды - это не избавляет от необходимости чтения талмудов, а не лазания по форумам.

Так, что берите в руки книжки и вперед.

Например, Благовещенский, "Вычисление элементарных функций на ЭВМ"

 

Или не менее занимательные изыски по вычислению обратного корня от Silicon Graphics:

http://www.codemaestro.com/reviews/9

Share this post


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

Не нравится - не читайте, обходите стороной.

 

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

ну что же, попробую еще раз объяснить.

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

 

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

 

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

 

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

 

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

Edited by Serg76

Share this post


Link to post
Share on other sites
и теперь предпочтительно писать по делу!
Вы провели большую и никому не нужную работу по доказательсту в сотый раз очевидного факта крайней неэффективности линейного метода вычисления квадратного корня по сравнению с методом Ньютона-Рафсона.

 

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

 

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

 

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

 

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

 

Резюме - "Всё украдено до нас", "незачем изобретать велосипед", используйте библиотечную подпрограмму.

 

Share this post


Link to post
Share on other sites
...извлечение корня из sqrt( I^2 + Q^2)...

Я бы для этого случая использовал CORDIC (алгоритм Волдера), где I и Q квадратуры...

Да и FPGA, если нужна предельная скорость. Результаты моделирования для одноактного устройства на FPGA дали на все 70 нс, это для 16 разрядного результата ...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this