- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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 中,HPF 和 VPI。)
关于c++ - 如何取一个非常大的数的根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878583/
我是一名优秀的程序员,十分优秀!