在运行时确定精度来提升cpp_dec_float

时间:2017-07-14 19:55:14

标签: c++ boost compiler-errors runtime arbitrary-precision

通常使用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

0 个答案:

没有答案