|
|
  |
извлечение корня из суммы квадратов sqrt( I^2 + Q^2), floating-point |
|
|
|
Dec 22 2012, 15:40
|
Местный
  
Группа: Участник
Сообщений: 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
--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
|
|
|
|
|
Dec 22 2012, 17:24
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111

|
Цитата(Serg76 @ Dec 22 2012, 21:16)  А теперь объясните, зачем создавать аналогичную тему, а не продолжить в той же самой, на которую ссылаетесь? чтоб ту не захламлять.. т.к. в той теме обсуждаются вопросы целочисленных данных. а я со своими вещественными - ни к селу ни к городу. да и создаю то я не тупо sqrt( X), а sqrt( I, Q), т.е. людям, которым интересно применение корня в цифровых детекторах сэкономят уйму времени, найдя сразу мою тему, чем читая многочисленные темы, где обсуждаются целые числа и ровно нуль по поводу floating-point. P.S. я то, видя что Вы пишете, надеялся что вы скажете что-то дельное....
--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
|
|
|
|
|
Dec 22 2012, 17:33
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

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

|
Непонятно, что Вас смущает. Если Вас устраивает точность и время - зачем "толочь воду в ступе"?
|
|
|
|
|
Dec 23 2012, 05:39
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111

|
Цитата(Serg76 @ Dec 22 2012, 20:33)  ну понято в общем, захламили вы этот форум порядочно. вы не объективны. Есть люди на форуме, которые были мне благодарны за помощь и я рад что помог кому-то.... И с чего я захламил? Почитайте темы на форуме, в которых вы, опытные, устраиваете холивары, путаете мозги молодежи и по-большому юлите, но не отвечаете на вопросы. (например темы С++ против Си и т.д.) Не нравится - не читайте, обходите стороной. я считаю моя тема имеет узкую специализацию - поэтому новая тема - все вопрос закрыт! Цитата(TSerg @ Dec 22 2012, 20:33)  Непонятно, что Вас смущает. Если Вас устраивает точность и время - зачем "толочь воду в ступе"? по поводу "что смущает" и "воду в ступе": это нормальный когнитивный процесс познания - вспомните высшую математику. В Вас на лекции пихают теорию, а практики Вам даны не для пустого переписывания формул, а чтобы преподаватель передал Вам свой опыт решения задач, указал правильность оформления, ход решения, "трюки", где-то подправил вашу логику, видя что Вы в чем-то путаетесь. Вы когда решили контрольную/семестровое, не знаете о правильности своего решения, но у Вас есть желание сравнить и спросить у товарищей.. я молодой и поэтому у меня возникают вопросы не только в начале разработки чего-либо, но, и как в примере, и после: по поводу правильности своей логики, идеи, счета, порядка полученных результатов, неучтенных моментов и их влияния на остальную часть системы (а опыта мало, поэтому на многие вопросы нет у меня ответов)... а на работе у нас спросить почти не у кого: т.к. часть классных инженеров разбежалась, т.к. Москва скупила и разваливает предприятие, а другую часть тупо в командировки стали засылать.... на форуме единственная возможность получить квалифицированную помощь. а вы обсирать молодежь, тянущуюся к знаниям, принялись... давайте закроем этот холивар. я я постарался объяснить. и теперь предпочтительно писать по делу!
Сообщение отредактировал beaRTS - Dec 23 2012, 06:25
--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
|
|
|
|
Guest_TSerg_*
|
Dec 23 2012, 10:08
|
Guests

|
>а вы обсирать молодежь, тянущуюся к знаниям, принялись... Где Вы такое нашли в моих ответах? Насколько помню, я Вам давал технический материал  Что же касается поиска наилучшего решения, то есть известная поговорка, да не одна: "Лучшее - враг хорошего", "Если работает - не трогай" и т.д. Ну и заниматься вместе с вами числовыми изысканиями вряд кто будет. Есть конкретный вопрос - задавайте максимально лаконично. Результат приводите в наиболее общем виде, а не выкатывайте простыни логов. И т.д. P.S. То, что Вы молоды - это не избавляет от необходимости чтения талмудов, а не лазания по форумам. Так, что берите в руки книжки и вперед. Например, Благовещенский, "Вычисление элементарных функций на ЭВМ" Или не менее занимательные изыски по вычислению обратного корня от Silicon Graphics: http://www.codemaestro.com/reviews/9
|
|
|
|
|
Dec 23 2012, 10:17
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

|
Цитата(beaRTS @ Dec 23 2012, 09:39)  вы не объективны. Есть люди на форуме, которые были мне благодарны за помощь и я рад что помог кому-то.... И с чего я захламил? Почитайте темы на форуме, в которых вы, опытные, устраиваете холивары, путаете мозги молодежи и по-большому юлите, но не отвечаете на вопросы. (например темы С++ против Си и т.д.) Не нравится - не читайте, обходите стороной.
я считаю моя тема имеет узкую специализацию - поэтому новая тема - все вопрос закрыт! ну что же, попробую еще раз объяснить. во-первых, прежде, чем создавать посты, а тем более новые темы, неплохо было бы разведать, что по этому вопросу уже обсуждалось, для чего элементарно научиться пользоваться поиском (это рекомендация администрации форума), коим вы пользоваться не умеете или, я подозреваю, просто игнорируете. потому, что все основные "проблемы", которые вы здесь подымали, элементарно находятся через поиск. во-вторых, прежде, чем бежать впереди паровоза и шлепать по клавиатуре, опережая мысли, в попытке осветить какие-то новые свои "идеи" или изложить "проблемы", неплохо было бы для начала проработать эти вопросы самостоятельно, как говорится с бумажкой и карандашом, а не изучать материал "по диагонали", как вы сами изволили выразиться. если ваша цель - набрать побольше и поскорее авторских постов (звездная болезнь что-ли или просто юношеский максимализм), то попробую вас разочаровать, набраться опыта вам это не поможет, вы больше времени тратите на бессмысленную и никому не нужную бюрократию на форуме вместо того, чтобы посветить это время на самообразование. многие эксперты, а таких здесь наберется с добрый десяток, даже больше, и чье мнение я уважаю, попросту не сотрясают воздух и, несмотря на огромный накопленный профессиональный и жизненный опыт, ценят свое и чужое время. в-третьих, по большому счету никому здесь неинтересны ваши "достижения", поэтому не стоит выкладывать их каждые пять минут с целью получить какую-то благосклонность. потому как складывается впечатление, что вы выкладываете свой ежедневный отчет о проделанной работе, хвастайтесь на работе, дома. думаю этого хватит пока. P.S. Да, и судя по вашему жизненному девизу: "Об уме человека вернее судить по его вопросам, нежели по его ответам", пока это не про ВАС.
Сообщение отредактировал Serg76 - Dec 23 2012, 11:00
|
|
|
|
|
Dec 25 2012, 21:50
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
QUOTE (beaRTS @ Dec 23 2012, 09:39)  и теперь предпочтительно писать по делу! Вы провели большую и никому не нужную работу по доказательсту в сотый раз очевидного факта крайней неэффективности линейного метода вычисления квадратного корня по сравнению с методом Ньютона-Рафсона. Неэффективность по числу итераций (для одинарной точности) 40/2 = 20, поскольку метод Н-Р сходится за две итерации из первого приближения известного с точностью 8 двоичных знаков (результат инструкции EISQRTF32). На каждой итерации линейного метода использутся деление, которое представляет собой вызов подпрограммы, использующей метод Н-Р для нахождения частного. Таким образом, линейный метод неэффективен и внутри отдельной итерации. Метод Н-Р не использует делений в итерациях. Вследствие хорошей аппаратной реализации основных трёх арифметических операций, точность метода Н-Р лучше по сравнению с линейным методом, где дополнительная погрешность вносится программно организованной операцией деления. По-прежнему не решён вопрос о переполнении/обнулении промежуточного результата - хотя это нельзя вам поставить в вину. Имеется ввиду, что при определённых условиях сумма квадратов может переполнится или обнулится, хотя корень из неё представим ненулевым числом в диапазоне чисел с плавающей точкой. С этой же проблемой тесно связано численное обнуление одного из квадратов слагаемых, в результате дающее корень равный большему модулю из (A,B), в то время как корень из их суммы квадратов представим числом с плавающей точкой. Резюме - "Всё украдено до нас", "незачем изобретать велосипед", используйте библиотечную подпрограмму.
|
|
|
|
|
Dec 26 2012, 06:23
|
Знающий
   
Группа: Свой
Сообщений: 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 разрядного результата ...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|