boost::multiprecision::pow,具有两个cpp_int值

boost::multiprecision::pow with two cpp_int values

本文关键字:两个 cpp int pow multiprecision boost      更新时间:2023-10-16

有没有一种方法可以使用两个cpp_int值作为参数的boost::multiprecision::pow?我在文档中所能找到的都是cpp_int类型的参数作为基数,int类型作为指数。这似乎非常有限。

注释:这有什么限制?你会提升到MAXINT以上的力量吗?怎样

Q
你的"如何"是什么意思?多精度库处理这样巨大的数字难道不是有意义的吗?

否。像这样的巨大数字在无损精度下几乎没有任何意义。

假设我们从一个相当小的数字开始,比如10。不适合64位整数的最小指数是2^64。所以,这个数字是10^(2^64),大约是18446744073709551617位小数≈1.84467×10^19位小数。

要打印出来,你需要大约1.4757×10^11公吨的纸,假设每80克纸5000位数。这大约相当于地球上的总生物量(≈8×10^13千克)。

现在,你当然不傻了,而且你不会打印的!你只需要把它放在RAM中,这就是为什么你开始为7.6598 EB的RAM进行众筹。更不用说它的电源了,因为供电一小时大约需要7吉瓦时,这相当于小男孩核弹能量产量的一半。

你能做什么

Boost Multiprecision确实允许您使用精确无损的大整数表示,但系统的资源限制了总容量。

如图所示,对于这些类型,超过64位整数的指数是不合理的。

当然,您可以使用任意精度的十进制/二进制浮点表示(当然,仍然遵守物理和经济学的约束),如boost::multiprecision::mpf_float_1000

您可以使用boost::multiprecision::float和相应的boost::multiprecision::pow实现。