是否有一個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