Глюки в Release

Тема в разделе "LANGS.C", создана пользователем _qwe8013, 19 июн 2017.

  1. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    125
    В общем делаю я аппроксимацию комплексного многочлена методом наименьших квадратов, составил соответствующую матрицу и решаю СЛАУ методом нижней релаксации (на каждой 1000 итерации вывожу разность последних результатов). В конце вывожу отклонения результата от значений в исходных точках. В Debug версии всё нормально, а вот в Release вместо отклонений выводятся NaN, что я делаю не так? Прикрепляю исходники, главный файл ComplexOLS.cpp, все закомментированные функции - для отладки и в общем не важны. Юзаю VS 2017.
     

    Вложения:

    • complexOLS.zip
      Размер файла:
      5 КБ
      Просмотров:
      358
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Видимо, из-за оптимизации вы вылетаете за пределы максимального/минимального значения числа. Мало того, вместо FPU оптимизатор вполне может вам нагенерить SSE-код.
     
  3. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    125
    Так у меня double прописано, а SSE этот тип поддерживает. И ещё сейчас вдруг глючить перестало, х#р знает что.
     
    Последнее редактирование модератором: 20 июн 2017
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    _qwe8013,

    Нужны два билда, иначе решение невозможно. У вас в архиве текстовый скрипт, в какой машкод он превратиться предсказать нельзя(каждый компиль своё генерит). И тем более нельзя предсказать что сделает компиль с дебаг опцией. Это не теоретическая задача, а нужно сравнить в отладчике разницу в двух бинарях.
     
  5. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Кстати, а чему у вас DBL_EPSILON равно?
    Я вот вижу проверку на случай больших чисел, а в случае малых чисел вы нормализацию не делаете, что тоже немного опасно.
     
  6. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    _qwe8013,
    ComplexDiv
    Dst->A /= Denom->A; // возможно деление на ноль?
     
  7. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    125
    SadKo,
    Код (C):
    1. #define DBL_EPSILON      2.2204460492503131e-016 // smallest such that 1.0+DBL_EPSILON != 1.0
    Возможно, не подумал об этом, проверю, когда вновь заглючит.
     
  8. ol.

    ol. Active Member

    Публикаций:
    0
    Регистрация:
    21 фев 2017
    Сообщения:
    118
    for (unsigned int j = 0; i < i; j++)

    оно?
     
  9. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    125
    Действительно, не заметил, возможно и оно.