| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, 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
где MAX_INPUT_DATA - максимально возможное значение входных данных. заметь, это макс. значение уже спектра мощности, т.е. уже квадрата re*re+im*im таким образом, чтобы получить твои 10e+195 при fftLength равном 3000, макс. размах входных данных д.б. ~1,2e378 Если в твоих входных данных такие значения - то всё так и должно быть. А скорее всего, у тебя либо пропись по памяти ( как bsa и говорил ), либо какие-то переменные (либо элементы массива) просто неинициализированны и там мусор, который может меняться, если вставить в код qDebug() |
| Автор: monstrl 10.2.2012, 14:18 |
| Проблему решил, всем спасибо. В не инициализированные переменные дейсвительно записывался мусор, обнулил на всякий случай. В алгоритме который мне дали, действительно был выход за пределы массива, на небольших числах он игнорился и все срабатывало в других программах, код переписал, теперь проблем нет. |