簡體   English   中英

boost::multiprecision::number

[英]boost::multiprecision::number

我是使用 boost 庫的新手,所以我感謝每一位幫助我的人。

#include "gmpxx.h"
#include <boost/multiprecision/gmp.hpp>
#include <boost/multiprecision/random.hpp>
#include <boost/multiprecision/number.hpp>

using namespace std;
using namespace boost::multiprecision;
using boost::multiprecision::mpz_int;
using boost::multiprecision::mpq_rational;
using boost::multiprecision::uint128_t;
using boost::multiprecision::uint256_t;
using boost::multiprecision::uint512_t;
using boost::multiprecision::uint1024_t;
using boost::multiprecision::mpf_float;

 void testtmultiprecisions(){
     mpq_rational b = boost::multiprecision::pow(mpf_float(1), mpf_float(2));
     std::cout << typeid(b).name() << std::endl;

  }

但我得到如下編譯器錯誤:

 error: conversion from boost::enable_if_c<true,   
  boost::multiprecision::detail::expression
  <boost::multiprecision::detail::function, 
  boost::multiprecision::detail::pow_funct
  <boost::multiprecision::backends::gmp_float<0u> >, 
  boost::multiprecision::number
  <boost::multiprecision::backends::gmp_float<0u> >, 
  boost::multiprecision::number
  <boost::multiprecision::backends::gmp_float<0u> >, void> 
  >::type {aka boost::multiprecision::detail::expression
  <boost::multiprecision::detail::function, 
  boost::multiprecision::detail::pow_funct
  <boost::multiprecision::backends::gmp_float<0u> >, 
  boost::multiprecision::number
  <boost::multiprecision::backends::gmp_float<0u> >, 
  <boost::multiprecision::backends::gmp_float<0u> >, void>}
  to non-scalar type â€کboost::multiprecision::mpq_rational {aka 
  boost::multiprecision::number
  <boost::multiprecision::backends::gmp_rational, 
  (boost::multiprecision::expression_template_option)1u>}
   requested
  mpq_rational b = boost::multiprecision::pow(mpf_float(1), mpf_float(2));

我也改變了上面的代碼:

  mpq_rational b = boost::multiprecision::pow(mpf_float(1),
  mpf_float(2)).covert_to<mpq_rational>();

並獲得新的編譯器錯誤:

[編譯錯誤]

根據定義,有理數具有整數分子和分母。

浮點到整數的轉換 - 再次根據定義 - 不是無損的。 編譯器只會編譯靜態已知為無損的轉換。

此外,轉換不會被鏈接(庫將如何解決不明確的轉換路徑?)。 在這種情況下,您可以使用轉換為mpq_rational的基礎類型(即mpz_int )的中間步驟幫助編譯器:

#include <boost/multiprecision/gmp.hpp>
#include <boost/multiprecision/number.hpp>
#include <iostream>

using boost::multiprecision::mpq_rational;
using boost::multiprecision::mpz_int;
using boost::multiprecision::mpf_float;

int main() {
    mpq_rational b = boost::multiprecision::pow(mpf_float(2), mpf_float(3)).convert_to<mpz_int>();
    std::cout << b << "\n";
}

印刷

8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM