当分子和分母有很多数字时,boost cpp_rational 似乎将错误转换为 int。
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
using namespace std;
int main() {
cpp_rational a("4561231231235/123123123123");
std::cout << "bad convert: " << a << ' ' <<
float(a) << ' ' << int(a) << ' ' <<
a.convert_to<int>() << endl;
a = (cpp_rational)"456/123";
std::cout << "good convert: " << a << ' ' <<
float(a) << ' ' << int(a) << ' ' <<
a.convert_to<int>() << endl;
}
输出是:
bad convert: 651604461605/17589017589 37.0461 -3 -3
good convert: 152/41 3.70732 3 3
此外,尝试将 cpp_rational 转换为 cpp_int 无法编译,例如,使用
cpp_int b = static_cast<cpp_int> (a);
cpp_int b = a.convert_to<cpp_int>();
我想要发生的是划分和四舍五入,即使接近整数也永远不会出错。
帮助?谢谢。