Здравствуйте! Есть код, там происходят вычисления с плавающей точкой, есть там две функции каждая возвращает вектор типа double в этих двух векторах должны содержаться одинаковые значения. Все прекрасно работает в Debug, в Release(если трейсить из студии VC2003), а вот если запустить отдельно бинарь Debug,Release, то значения будут разные отличаться будут на сотые, или на тысячные, или на 10 тысячные. Может уже кто сталкивался с этим, как это забарывать.
если не была сделана инициализация переменной перед её использованием, то результатом может быть та разница о которой идёт речь. В debug и release значения в неинициализированых переменных различаются, в одно случае в переменной сидит ноль - в другом - некоторое ненулевое значение. _DEN_ В каком смысле? Сравнение запрещено?
>>если не была сделана инициализация переменной перед её использованием, то результатом может быть та разница >>о которой идёт речь. В debug и release значения в неинициализированых переменных различаются, в одно случае в >>переменной сидит ноль - в другом - некоторое ненулевое значение. Угу, в точку. Уже все работает, там, в одном хитром месте действительно забыл занулить память. >>Никак. Для флоатпоинтов нельзя использовать operator == Для флоатпоинтов нет, а для unsigned __int64 в случае double, или unsigned int в случае float можно делается так: struct DOUBLE_UNION { union { double d_; unsigned __int64 ullong; }; }; Как вариант можно использовать еще memcmp.
qwerty_9876 Ты не понял. Сравнивать-то можно. Вот только, как верно подметил комрад censored, в этом не будет смысла, как бы ты не сравнивал, напрямую, через union, через memcmp, или как-то еще. Суть в том, что компьютерный float-point может точно описывать только узкий круг вещественных чисел, а именно числа вида A * 2^B, где A и B - целые. Все остальные числа описываются с некоторой ошибкой. А какой смысл проверять два числа на идентичность друг другу, если они сами уже хранят ошибку? Никакого. [EDIT]: "описываются с некоторой ошибкой" - более точно означает "описываются как ближайшее число вида A * 2^B"