188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
1 | |
Потеря точности у double21.05.2013, 17:21. Показов 3136. Ответов 12
Метки нет (Все метки)
Салют!
Ситуация следующая - есть необходимость работать с изображением, а точнее - с его градиентом/направлением градиента. Для вспомогательных целей использую матрицы double'ов. Этот самый градиент не один раз для изображения пересчитывается, в частности, основная часть - с использованием оп. Собеля, не в этом суть. так вот, до этого работал на VS 2010, и никаких проблем не замечал (может, был слишком незначительны). Недавно переписал весь функционал с нуля, используя VS 2012, и заметил одну вещь - видимо, из-за потери точности(ошибок округления и т.п.) результат после нескольких применений нужных операций не всегда идентичен...Ярко это проявляется на нескольких изображения, и, что самое главное - в и без того проблемных участках. Возможно ли, что это происходит из-за Спасибо за внимание.
0
|
21.05.2013, 17:21 | |
Ответы с готовыми решениями:
12
Потеря точности числа формата double Потеря точности при масштабировании Потеря точности при использовании static_cast Точности вычислений double |
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
21.05.2013, 17:59 [ТС] | 3 |
Но алгоритм то одинаковый (для градиента который)...
Я даже специально среднее арифметическое проверял - разное оно иногда, т.е. все-таки где-то ошибка округления происходит..
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
21.05.2013, 18:07 | 5 |
monolit, что такое в алгоритме под 2010 не устраивало, что пришлось переписать под 2012? И какая вообще разница 2010/2012 в данном случае? Если есть подозрение на проблемы в 2012, то просто перенесите код в 2010 и проверьте работоспособность.
0
|
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
21.05.2013, 18:08 [ТС] | 6 |
шибко кода много уж...
Просто я вот думаю - может ли причиной различных результатов быть использование double, или нет? Замечу, что в предыдущей реализации использования этого типа было, вроде, поменьше.. Tulosba, просто студия новая подвернулась, да и быстродействие старого кода оставляло желать лучшего, а пытаться его исправить...несколько тысяч строк, я решил, что проще переписать заново, учитывая мои новые требования...Не все переписывал, конечно, лишь, так сказать, основную часть, в которой и была проблема.
0
|
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
21.05.2013, 18:44 [ТС] | 8 |
Вполне допускаю это. Но результат различается не в сравнении со старым алгоритмом, а в сравнении с собой же, но вычисленным в другой раз..rand я там не использовал, так что больше грешить не на что) Хитрых условных переходов тоже не припомню. Как бы не пришлось весь код пересматривать, епт..
0
|
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
21.05.2013, 18:51 [ТС] | 11 |
ну, вычисление градиента - лишь малая, вспомогательная, часть, в которой с double и работаю)
А теоретически: Код
2.0/159 Код
2.0/159.0
0
|
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
21.05.2013, 21:27 [ТС] | 13 |
Кажись участок с ошибкой нашел. Странно правда...
Позже поподробнее рассмотрю и напишу) Добавлено через 2 часа 29 минут Спасибо всем за содействие, действительно, гулял по памяти в самом неожиданно месте...Думал, настолько очевидной ошибки не совершу, а оно вон как...
0
|
21.05.2013, 21:27 | |
21.05.2013, 21:27 | |
Помогаю со студенческими работами здесь
13
float и double (расчет точности) Точности вычислений и преобразований double Расчет точности для float и double Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |