gpt4 book ai didi

C++ Boost 多精度 cpp_int

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:46 25 4
gpt4 key购买 nike

我尝试获取一个大数字的日志。我应该怎么做?我无法使用 gmp.hpp,因为它显示 Cannot open include file: 'gmp.h': No such file or directory

下面的代码

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>

#define rsa100 "1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139"


using namespace std;
using namespace boost::multiprecision;

int main(){
cpp_int n(rsa100);
cout << boost::multiprecision::log(n);
return 0;
}

给我错误:

1>------ Build started: Project: rsa, Configuration: Debug x64 ------
1> Source.cpp
1>Source.cpp(12): error C2893: Failed to specialize function template 'enable_if_c<boost::multiprecision::number_category<Num>::value==1,boost::multiprecision::detail::expression<boost::multiprecision::detail::function,boost::multiprecision::detail::log_funct<Backend>,boost::multiprecision::number<B,et_on>,void,void>>::type boost::multiprecision::log(const boost::multiprecision::number<B,et_on> &)'
1> With the following template arguments:
1> 'Backend=boost::multiprecision::backends::cpp_int_backend<0,0,signed_magnitude,unchecked,std::allocator<boost::multiprecision::limb_type>>'
1>Source.cpp(12): error C2784: 'enable_if_c<boost::multiprecision::number_category<boost::multiprecision::detail::expression<tag,Arg1,Arg2,Arg3,Arg4>>::value==number_kind_floating_point,boost::multiprecision::detail::expression<boost::multiprecision::detail::function,boost::multiprecision::detail::log_funct<detail::backend_type<boost::multiprecision::detail::expression<tag,Arg1,Arg2,Arg3,Arg4>>::type>,boost::multiprecision::detail::expression<tag,Arg1,Arg2,Arg3,Arg4>,void,void>>::type boost::multiprecision::log(const boost::multiprecision::detail::expression<tag,Arg1,Arg2,Arg3,Arg4> &)' : could not deduce template argument for 'const boost::multiprecision::detail::expression<tag,Arg1,Arg2,Arg3,Arg4> &' from 'boost::multiprecision::cpp_int'
1> C:\boost_1_55_0\boost/multiprecision/detail/default_ops.hpp(1998) : see declaration of 'boost::multiprecision::log'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

最佳答案

log 取一个实数,不是整数。

#include <iostream>
#include <iomanip>
#include <boost/multiprecision/cpp_dec_float.hpp>

#define rsa100 "1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139"

using namespace std;
using namespace boost::multiprecision;

int main(){
cpp_dec_float_100 n(rsa100);

auto log_n = log(n);
auto exp_log_n = exp(log_n);

cout << std::fixed << log_n << "\n";
cout << std::fixed << exp_log_n << "\n";
}

查看 Live on Coliru

关于C++ Boost 多精度 cpp_int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21696701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com