具有两个 cpp_int 值的 boost::multiprecision::pow
Posted
技术标签:
【中文标题】具有两个 cpp_int 值的 boost::multiprecision::pow【英文标题】:boost::multiprecision::pow with two cpp_int values 【发布时间】:2017-04-19 01:03:56 【问题描述】:有没有办法使用 boost::multiprecision::pow 和两个 cpp_int 值作为参数?我在文档中可以找到的所有参数都有 cpp_int 类型的参数作为基数和 int 类型的参数。这似乎非常有限。
【问题讨论】:
这是如何限制的?你会提升到 MAXINT 之上的权力吗?怎么样? “如何”是什么意思?多精度库的意义不在于处理这样的大量数字吗? 有趣的是,超几何级数展开式可能有一个错误:coliru.stacked-crooked.com/a/6fb533f85641ff35 - 我将把它留在这里,以防您遇到此问题并想向上游报告。不过我可能会遗漏一些东西。 请说明您需要哪些附加功能。 【参考方案1】:评论:这是如何限制的?你会提升到 MAXINT 之上的权力吗?怎么样?
问: 你是什么意思'如何'?多精度库的意义不在于处理这样的大量数字吗?
没有。像这样的巨大数字在无损精度下几乎没有任何意义。
假设我们从一个相当小的数字开始,例如10
。不适合 64 位整数的最小指数是 2^64。所以,这个数字是 10^(2^64),大约是 18446744073709551617 个十进制数字
≈ 1.84467×10^19 个十进制数字。
假设5,000 digits per 80g page,要打印,您需要重约 1.4757×10^11 公吨的纸张。这大致相当于地球上的总生物量(≈ 8×10^13 kg)。
现在,你当然不傻,而且你不会打印它!您只需要将它安装到 RAM 中,这就是您开始为您的 7.6598 艾字节 RAM 进行众筹的原因。更别说它的供电了,因为powering that一小时的耗电量大约是7吉瓦时,相当于小男孩核弹的一半能量产量。
你能做什么
Boost Multiprecision确实允许您使用巨大整数的精确和无损表示,但是您的系统资源限制了总容量。
如图所示,超过 64 位整数的指数不适用于这些类型。
当然,您可以使用任意精度的十进制/二进制浮点表示(当然,仍然尊重物理学和经济学的限制),例如boost::multiprecision::mpf_float_1000
。
【讨论】:
作为熟悉大数的人,我赞成这个答案。 +1【参考方案2】:您可以使用 boost::multiprecision::float 和相应的 boost::multiprecision::pow 实现。
【讨论】:
以上是关于具有两个 cpp_int 值的 boost::multiprecision::pow的主要内容,如果未能解决你的问题,请参考以下文章
如何从 cpp_dec_float_50 转换为 cpp_int?一般关于浮点数?
使用 boost 库 (cpp_int) 时出现常量太大的错误