c++ - 指数的前 n 位

标签 c++ c math exponentiation

我如何确定指数的前 n 位 (ab)。

eg: for a = 12, b = 13 & n = 4, the first 4 digits are 1069.

最佳答案

通过以下迭代计算 ab:

a1 = a1,
a2 = a2,
...
ai = ai,
...
ab = ab

你有 ai+1 = ai×a。不准确地计算每个 ai。问题是 ab 的相对误差小于 na 相对误差。
您希望获得小于 10-n 的最终相对误差。因此每一步的相对误差可能是 forumula .在每一步中删除最后一位数字。

例如,a=2b=16n=1。最终相对误差为 10-n = 0.1。每一步的相对误差为 0.1/16 > 0.001。因此 3 位数字在每一步都很重要。如果 n = 2,则必须保存 4 位数字。通用规则:每一步保存 [n+log10 b] 位。

2 (1), 4 (2), 8 (3), 16 (4), 32 (5), 64 (6), 128 (7), 256 (8), 512 (9), 1024 ( 10) → 102,
204 (11), 408 (12), 816 (13), 1632 (14) → 163, 326 (15), 652 (16).

答案:6.

该算法的复杂度为 O(b)。但是很容易将其更改为 O(log b)

关于c++ - 指数的前 n 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3873298/

相关文章:

c++ - 为什么我不能在 MinGW 中链接 64 位 .lib 文件?

c++ - 使用其他文件构建 gcc 插件

c++ - 处理客户端连接的最有效方式(套接字编程)

javascript - 根据高度计算纵横比宽度

c# - 在 C# 中使用鼠标拖动重新调整旋转矩形的大小

c++ - 获取特征矩阵元素类型的好方法

c++ - 在 C++ 中使用函数对数组进行排序

c++ - 联盟内部结构

c - 未定义对“sqrt”的引用

python - 如何在 Python 中获得更精确的十进制值