1
10 진수 부동 유형에 boost :: multiprecision 라이브러리를 사용하고 있고 두 개의 부동 소수점을 지정된 정밀도와 비교하려고합니다. 부스트 muliprecision cpp_dec_float를 원하는 정밀도와 비교하십시오.
그러나 cpp_dec_float 지정된 정밀도로하지 수를 비교하는 것뿐만 아니라, 가드 자리 포함#include <iostream>
#include <boost/multiprecision/cpp_dec_float.hpp>
//#include <boost/math/special_functions.hpp>
typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50> > flp_type;
int main(int argc, char* argv[])
{
// 50 decimal digits
flp_type sqrt2("1.4142135623730950488016887242096980785696718753769");
// Contains calculated guard digits
flp_type result(boost::multiprecision::sqrt(flp_type("2")));
// The 50 digits of precision actually ompare equal
std::cout << std::setprecision(50) << sqrt2 << std::endl;
std::cout << std::setprecision(50) << result << std::endl;
// I want this to compare to the specified precision of the type, not the guard digits
std::cout << (result==sqrt2) << std::endl;
return 0;
}
출력 : 예상
1.4142135623730950488016887242096980785696718753769
1.4142135623730950488016887242096980785696718753769
0
:
1.4142135623730950488016887242096980785696718753769
1.4142135623730950488016887242096980785696718753769
1
precision()을 사용하여 "잘라내려고"시도했지만 아무 소용이 없습니다. 엡실론 비교없이 두 숫자를 비교하는 방법이 있습니까?
당신은 모든 구석을 돌아 다녔습니까? : D 나는 엡실론이 (물론 문자열 비교를 제외하고) 갈 길이라는 귀하의 답을 두려워했지만 유형이 다른 논리로 감싸 졌으므로 완화되었습니다. 나는 보호 자릿수 그 자체를 벗기는 것을 의미하지는 않았다. 나는 비교를 의미하지만 계산을 위해 그들을 지키고 있습니다. 나는 타입이 비교를 위해 가드 디지트를 사용할 것이라는 직관이 없다는 것을 알았지 만, 그 토론은 무의미하다. :) – namezero
이것이 말하자면, 이것을 고칠 장소는 cpp_dec_float.hpp (1292)의 cmp_data() 메소드 일 것이다. 부스트 1.56). 여기 불일치 쌍은 불일치가 보호 자릿수에 있는지 확인하기 위해 더 조사 할 수 있습니다. 그렇다면 0을 반환하십시오. – namezero
개발자가 사고가 났는지 또는 의도적인지 여부를 확인하려면 개발자와 함께 취하십시오. 나는 그것에 대해 확실하지 않다 – sehe