Почему цифровая библиотека boost дает разные результаты при использовании режима отладки или выпуска?

Я столкнулся с явлением, что мой код дает мне разные результаты, когда я использую режим отладки или режим выпуска. Я сократил проблему до кода ниже. Я использую Microsoft Visual Studio Professional 2013 и libeary boost 1.62

#include "stdafx.h"#include <iostream>
#include <math.h>

#include <boost/numeric/interval.hpp>
#include <boost/numeric/interval/rounded_arith.hpp>

using namespace std;
using namespace boost::numeric::interval_lib;
using namespace boost::numeric;

typedef interval<double, policies<save_state<rounded_transc_std<double> >,
checking_base<double> > > Interval;

int _tmain(int argc, _TCHAR* argv[])
{
Interval result = (Interval(3.15, 4.6) - Interval(-0.6, 2.1))*sqrt(Interval(2, 2) + Interval(-2, -2)*Interval(10.022631612535406, 10.031726559552226));
cout << "result: " << result.lower() << " " << result.upper();

return 0;
}

Результат в режиме отладки: 1. # QNAN 1. # QNAN

Результат в режиме релиза 0 0

Я хотел бы знать, что вызывает эту проблему и как это исправить. Поскольку это вызывает серьезные проблемы в моем проекте, если я не могу положиться на результаты.

3

Решение

sqrt отрицательного числа является жестким предложением. Проблема в Interval(-2, -2), Волшебство VisualStudio остается для получения 0, 0. :). nan является наиболее подходящим ответом на sqrt(-x), ты можешь sqrt из std::complex<T>,

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector