是否有一个C++库可以获取大数字的第n个根(数字不能放在unsigned long long
中)?如何在C++中获取大数的第n个根?
回答
您可以使用GMP,一个流行的开源任意精度数学库。它有C++ bindings。
如果你想这个自己的代码,请查看维基百科页面上的第n根:
http://en.wikipedia.org/wiki/Nth_root
的迭代算法很简单:
许多A级的N次方根可由第n个根算法计算,牛顿法的一个特例。开始的初始猜测X(0),然后使用迭代递推关系
x(k+1) = [(n - 1) * x(k) + A/x(k)^(n - 1)]/n
停止,一旦你已经收敛到所需的精度。
这取决于你想要走多远大于2^64,我想。在10^9的时候使用双打大约是1分。我在C写一个测试程序:
#include <stdio.h>
#include <math.h>
int main(int argc, char **argv)
{
unsigned long long x;
double dx;
int i;
//make x the max possible value
x = ~0ULL;
dx = (double)x;
printf("Starting with dx = %f\n", dx);
//print the 2th to 20th roots
for (i = 2; i < 21; i++)
{
printf("%dth root %.15f\n", i, pow(dx, 1.0/i));
}
return 0;
}
其产生以下输出:
Starting with dx = 18446744073709551616.000000
2th root 4294967296.000000000000000
3th root 2642245.949629130773246
4th root 65536.000000000000000
5th root 7131.550214521852467
6th root 1625.498677215435691
7th root 565.293831000991759
8th root 256.000000000000000
9th root 138.247646578215154
10th root 84.448506289465257
11th root 56.421840319745364
12th root 40.317473596635935
13th root 30.338480458853493
14th root 23.775908626191171
15th root 19.248400577313866
16th root 16.000000000000000
17th root 13.592188707483222
18th root 11.757875938204789
19th root 10.327513583579238
20th root 9.189586839976281
然后我与Wolfram Alpha每个根得到我上面引述的错误比较。
根据您的应用程序,也许这将是足够好的。
长分法是计算任何正实数的第n个根的最佳方法。它给出了计算出的每个数字的最佳精度。不需要初始猜测,也不需要迭代逼近。
一个例子值得千言万语...... – 2016-02-17 11:23:21
虽然这可能是一个有价值的提示来解决问题,但一个好的答案也说明了解决方案。请[编辑]提供示例代码来展示你的意思。或者,可以考虑将其写为注释。 – 2017-05-10 14:25:02
- 1. 如何获取第n个最近值?
- 2. 如何获取第n个计数的NSArray元素?
- 3. 编号的第n个根(
- 4. 在MongoDB中获取JSON数组的第n个项目
- 5. 如何从PHP中的此SimpleXMLObject获取第n个值?
- 6. 获取数组中的每个第n个项目
- 7. 如何从OpenCV中的n维数组中获取最大值
- 8. 如何从FILTERED范围获取第一个(第N个)行/列? (内置函数)
- 9. xslt根据属性值获取第n个同级
- 10. 获取BST的第n个项目
- 11. 获取第N行的PostgreSQL
- 12. 获取整数的第n位精度
- 13. 在Python中,如何获取列表中的第n个项目的值?
- 14. 如何获得bash中的第n个位置参数?
- 15. 如何获取根的大小&&已使用的根的大小
- 16. 如何使用jQuery获取第n个孩子的属性?
- 17. 如何获取字母表的第n个字母
- 18. 如何从Objective-C的NSString中获取前N个单词?
- 19. 如何从qt中的QSqlQuery中获取第n条记录
- 20. 使用BeautifulSoup获取第n个元素
- 21. 由图案获取第n个范围
- 22. 如何在C++中查找矢量的第m个元素和第n个元素之间的最大元素?
- 23. 如何在java中的第n个“ - ”(短划线)之后获取字符串?
- 24. 如何在重复控制中获取第n个编辑框的值?
- 25. 如何从awk中的第(n + 3)行减去第n个?
- 26. 如何获取django模板循环中第二,第三,第n遍的值?
- 27. 如何计算C++中的第3个数字根
- 28. 获取在一个N×N的网格
- 29. 如何从MySQL表中的第一个ID获取最大ID?
- 30. 如何用java获取HBase中的第n行?
是的,特别是函数mpz_root。 – 2010-04-08 23:32:54