gpt4 book ai didi

c++ - 如何取一个非常大的数的根?

转载 作者:行者123 更新时间:2023-11-30 00:55:10 25 4
gpt4 key购买 nike

given x=4 and y=1296;
we need to solve for z in z^x=y;
we can calculate z=6 in various ways;

问题是如果 y 是一个大于 10^100 的非常大的数,我如何找到 z?我显然不能将该数字存储为 int,那么我将如何计算 z?

C++ 实现会很好,如果不是,任何解决方案都可以。

最佳答案

这取决于所需的准确性。由于 1e100 不能精确表示为 double ,因此您遇到了问题。

如果您愿意接受它不会产生精确的解决方案,那么这是可行的。但是,我刚才说 1e100 无论如何都不能完全表示为 double 。因此,在 MATLAB 中,

exp(log(1e100)/4)
ans =
1e+25

好的,看起来 1e25 就是答案,但真的是这样吗?事实上,我们真正得到的数字,以 double 形式,是:10000000000000026675773440。

一个问题是原始数字无论如何都没有准确表示。所以 1e100,当以 IEEE 格式存储时,更准确地存储为这样的东西:

1.00000000000000001590289110975991804683608085639452813897813e100

要准确解决这个问题,最好使用大整数形式,但大的小数形式也可以做得相当好。

因此,在 MATLAB 中,使用我的大十进制 (HPF) 形式,我们看到 1e100 精确表示为 100 位精度。

x = hpf('1e100',100)
x =
1.e100

并且,对于 100 位精度,根是正确的。

exp(log(x)/4)
ans =
10000000000000000000000000

实际上,要小心,因为任何浮点形式都不能准确表示实数。为了更精确,我们看到计算出的数字实际上有轻微的错误:

一个大整数形式将产生一个精确的结果,如果存在的话。因此,使用大整数形式,我们看到预期的结果:

vpi(10)^100
ans =
10000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000

nthroot(vpi(10)^100,4)
ans =
10000000000000000000000000

关键是,要进行您想要的计算,您需要使用可以进行计算的工具。有许多这样的大十进制或大整数工具。例如,Java 有一个 BigDecimal and a BigInteger我偶尔使用的形式(尽管我已经编写了自己的工具,因此在 MATLAB 中,HPFVPI。)

关于c++ - 如何取一个非常大的数的根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878583/

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