Boost Multiprecision library 문서에 분명하게 될 때, boost::multiprecision::cpp_int
boost::multiprecision::cpp_dec_float
A와 변환하는 간단하다 :boost :: multiprecision :: cpp_int을 (를) cpp_dec_float <0> (cpp_dec_float_50 등이 아닌)으로 변환하는 방법?
// Some interconversions between number types are completely generic,
// and are always available, albeit the conversions are always explicit:
cpp_int cppi(2);
cpp_dec_float_50 df(cppi); // OK, int to float // <-- But fails with cpp_dec_float<0>!
고정 폭에 cpp_int
에서 부동 소수점 형식으로 변환 할 수있는 기능 (즉, cpp_dec_float_50
)은 cpp_int
에서 임의 길이 라이브러리 부동 소수점 유형 (예 : cpp_dec_float<0>
)으로 변환 할 수 있다는 희망을 제시합니다. 그러나 이것은 작동하지 않습니다. 다음의 간단한 예제 프로그램을 보여줍니다로 변환, 비주얼 스튜디오 2013 년 나를 위해 실패
#include <boost/multiprecision/number.hpp>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
int main()
{
boost::multiprecision::cpp_int n{ 0 };
boost::multiprecision::cpp_dec_float<0> f{ n }; // Compile error in MSVC 2013
}
그것은 이 예상대로 cpp_dec_float_50
로 변환 성공 않지만, 언급 한 바와 같이, 나는 임의의로 변환 바라고 정밀 부동 소수점 유형 : cpp_dec_float<0>
.
<boost/multiprecision/detail/default_ops.hpp>
에, 내부 부스트 Multiprecision 코드에서 코드의 다음 코드에 표시
:
template <class R, class T>
inline bool check_in_range(const T& t)
{
// Can t fit in an R?
if(std::numeric_limits<R>::is_specialized && std::numeric_limits<R>::is_bounded
&& (t > (std::numeric_limits<R>::max)()))
return true;
return false;
}
오류 메시지는 다음과 같습니다
오류 C2784 : 'enable_if : : result_type, detail :: expression :: result_type>, bool> :: type boost :: multiprecision :: operator> (const boost :: multiprecision :: detail :: expression (3210), CONST 부스트 :: multiprecision :: 자세히 :: 표현 &) ' 가 템플릿 인수를 추론 할 수없는'const를 부스트 :: multiprecision :: 자세히 :: 표현 & ' 에서'const를 next_type '
처럼 부동 소수점 유형으로 고정 소수점 이하 자릿수로 변환하는 대신 boost::multiprecision::cpp_int
을 boost::multiprecision::cpp_dec_float<0>
으로 변환 할 수 있습니까?
(내 프로그램에서는 부동 소수점 인스턴스가 하나만 인스턴스화되며 이는 거의 업데이트되지 않으므로이 인스턴스가 많은 메모리를 차지하고 오래 걸리는 것이 좋습니다. 정말 큰 숫자를 지원하는 시간입니다.)
고마워요!
위대한! 나는 이것을 아마 내일 시도 할 것이고 그것이 나에게도 효과가 있는지 알려줄 것이다. –
@Gracchus 잘리지 않습니까? 정밀도는 완전 충실도입니다. 기본적으로 화면 표시는 기본값이 아닙니다. 왜? 글쎄, 페이지에서 실행되는 숫자가 거의 유용하지 않기 때문입니다. 사람들은 30 자리 넘는 숫자를 읽는 데 어려움을 겪습니다 ... 완전한 정밀도의 직렬화가 필요한 경우 부스트 직렬화를 사용하십시오. – sehe
@ Gracchus 방금 [반올림 질문] (http://stackoverflow.com/a/23033117/85371)에 대한 답변을 마무리했습니다. 나는 조금 더 일찍 시간이 부족했고 도서관과 혼동을 느꼈다 :/나는 프리젠 테이션 질문에 대해 곧 살펴 보도록하겠습니다. – sehe