Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > qt inf nan появляются большие числа


Автор: monstrl 9.2.2012, 14:30
Здравствуйте. Проблема с обработкой временного ряда точнее двумерного массива в 3000 элементов рядом фурье и еще парой преобразований. Суть в том что есть вложенность циклов до 5 уровней, конечное число будет комплексным каждого ряда, при нахождении коря от суммы мнимого и реального число становиться inf. Отдельно до нахождения корня бывает до 10e+200. Если же, например, до нахождения корня поставить qDebug() << "gdfgdfgdf"; то числа становяться и реальное и мнимое и корень не менее +-(10e-8) то есть то что мне нужно.
Вопрос: каким образом он может влиять и почему появляются большие числа? ставил qDebug() до цикла тоже все норм, проверял программу на двух разных компах, разницы нет.

Автор: bsa 9.2.2012, 16:26
Очень может быть выход за границы массива. Случаем программа не многопоточная?

Автор: monstrl 9.2.2012, 16:58
применил все параметры оптимизации не помогло, в релизе если запустить то значения одни считаются правильно, но при возведении в квадрат inf. В отладке это значение более 10e+195, квадрат этого числа inf. Думаю проблема в среде, может есть какие нибудь способы оптимизации в qt? Алгоритм программы правильный, проверенный, а вот массив чисел очень большой более 2000, числа double.

Автор: bsa 9.2.2012, 17:24
Я тебе говорю, что что-то повреждает твои переменные. Пройди отладчиком в тех местах, где сбоит.

Автор: monstrl 10.2.2012, 08:25
прошел  отладчиком все нормально, qDebug() если поставить на вывод параметров сразу после счета, то все числа нормальные, если убрать его то убегают в бесконечность, думаю что проблема возможна в среде?

Автор: math64 10.2.2012, 09:09
Выложи код - возможных причин может быть много.

Автор: borisbn 10.2.2012, 09:10
monstrl, максимальное значение уровня спектра мощности после fft
Цитата
fftLength ^ 2 * MAX_INPUT_DATA ^ 2;

где MAX_INPUT_DATA - максимально возможное значение входных данных.
заметь, это макс. значение уже спектра мощности, т.е. уже квадрата re*re+im*im
таким образом, чтобы получить твои 10e+195 при fftLength равном 3000, макс. размах входных данных д.б. ~1,2e378
Если в твоих входных данных такие значения - то всё так и должно быть.
А скорее всего, у тебя либо пропись по памяти ( как bsa и говорил ), либо какие-то переменные (либо элементы массива) просто неинициализированны и там мусор, который может меняться, если вставить в код qDebug() 

Автор: monstrl 10.2.2012, 14:18
Проблему решил, всем спасибо.
В не инициализированные переменные дейсвительно записывался мусор, обнулил на всякий случай.
В алгоритме который мне дали, действительно был выход за пределы массива, на небольших числах он игнорился и все срабатывало в других программах, 
код переписал, теперь проблем нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)