3
디버그 모드 나 릴리스 모드를 사용할 때 내 코드에서 다른 결과를 얻는 현상이 발생했습니다. 문제를 아래 코드에서 제거했습니다. 릴리스 모드 0 0왜 숫자 라이브러리는 디버그 또는 릴리스 모드를 사용하여 다른 결과를 제공합니까?
동안 디버그 모드에서 1. # QNAN결과 1 # QNAN 동안 나는 마이크로 소프트 비주얼 스튜디오 프로페셔널 2013과 libeary 부스트 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;
}
결과를 사용하고 있습니다
이 문제의 원인과 해결 방법을 알고 싶습니다. 결과에 의존 할 수 없다면 프로젝트에 심각한 문제가 생길 수 있습니다.
'std :: complex'의 문제는 boost 라이브러리의 간격을 사용해야한다는 것입니다. 문서에 따르면 이것은 불가능합니다. '우선, 간격의 정의로 인해 기본 숫자가 완전히 정렬되어야합니다. 예를 들어, 복소수 은 간격의 기본 숫자 형식으로 사용할 수 없습니다.'(...)'모두 제공 클래스 템플릿 간격의 템플릿 인수 T를 IEEE-754 표준에 정의 된 부동 소수 유형 float, double 및 long double로 제한하려고 할 수 있습니다. –
solid