通常使用Boost' cpp_dec_float
创建任意长度的数据类型,您可以使用:
typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100> > arbFloat;
这很好,但是看起来精度的值(高于100
)需要在编译时保持不变并确定。例如,此代码执行不编译:
#include <boost/multiprecision/cpp_dec_float.hpp>
int main() {
int custom_precision = 100;
typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<custom_precision> > arbFloat;
return 0;
}
并返回以下错误:
In function ‘int main()’:
5:77: error: ‘custom_precision’ cannot appear in a constant-expression
typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<custom_precision> > arbFloat;
^
5:93: error: template argument 1 is invalid
typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<custom_precision> > arbFloat;
^
5:95: error: template argument 1 is invalid
typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<custom_precision> > arbFloat;
^
5:95: error: template argument 2 is invalid
但是当int custom_precision
变为常量时:const int custom_precision
程序编译得很好。
有没有办法在运行时使用Boost&#39; cpp_dec_float
精确度,或者某种方式至少欺骗它?
我计划将它与命令行解析一起使用,这样我就可以执行以下操作:
$ ./test_program --precision 500