当使用大实数处理零值时,boost :: multiprecision :: pow的奇怪行为

时间:2013-09-19 10:51:13

标签: c++ boost g++

我有以下代码:

boost::multiprecision::cpp_dec_float_100 frn = 
    boost::multiprecision::pow(boost::multiprecision::cpp_dec_float_100(0),
      boost::multiprecision::cpp_dec_float_100(2));
std::cout << "Trial1: " << frn << std::endl;

frn = boost::multiprecision::pow(boost::multiprecision::cpp_dec_float_100(2),
    boost::multiprecision::cpp_dec_float_100(0));
std::cout << "Trial2: " << frn << std::endl;  

frn = boost::multiprecision::pow(boost::multiprecision::cpp_dec_float_100(2),
    boost::multiprecision::cpp_dec_float_100(2));
std::cout << "Trial3: " << frn << std::endl;

frn = boost::multiprecision::pow(boost::multiprecision::cpp_dec_float_100(2),
    boost::multiprecision::cpp_dec_float_100(3));
std::cout << "Trial4: " << frn << std::endl;

frn = boost::multiprecision::pow(boost::multiprecision::cpp_dec_float_100(2),
    boost::multiprecision::cpp_dec_float_100(4));
std::cout << "Trial5: " << frn << std::endl;

frn = boost::multiprecision::pow(boost::multiprecision::cpp_dec_float_100(2),
    boost::multiprecision::cpp_dec_float_100(5));
std::cout << "Trial6: " << frn << std::endl;

当然,我已经包含了所有库。我只是在主程序中展示了一个片段。

我得到了这个输出:

Trial1: 1
Trial2: 1
Trial3: 4
Trial4: 8
Trial5: 16
Trial6: 32

问题在于第一个值。我要求0提高到2,但我得到1而不是0(好像我试图将2提高到0)。我认为参数是倒置的,所以我尝试反转它们但仍然得到1.我认为程序以某种方式被破坏并得到其他值但是它似乎与不同于零的值一起工作。

发生什么事了?三江源

0 个答案:

没有答案