我想在我的應用程序中計算大數小數的平方根。請不要建議一些第三方公用事業,因爲我不能進入授權循環。 我一直在使用Newton-Raphson方法,但是因爲它使用了pow和分割操作。我可以看到它在Profiler中減慢了我的應用程序。你們可以爲我推薦一些很好的實施嗎? 或者可以有一些不同於Newton-Raphson的算法,或者如果不是,則可以使用按位運算來更快地實現它。如何比牛頓拉夫森更有效地計算大十進制的平方根?
3
A
回答
0
您可以使用二分查找找到平方根。 類似的東西:
BigDecimal sqrt(BigDecimal a){
BigDecimal left = BigDecimal.ZERO;
BigDecimal right = a;
for (int i = 0; i < BINARY_SEARCH_ITER_COUNT; ++i) {
BigDecimal middle = left.add(right).divide(BigDecimal.valueOf(2));
if (middle.multiply(middle).compareTo(a) < 0) {
left = middle;
} else {
right = middle;
}
}
return left.add(right).divide(BigDecimal.valueOf(2));
}
您可以調整迭代次數,以配合您的精度和exectuion時間requrements。但我不知道這與牛頓 - 拉夫遜相比如何運作。
+1
二元搜索比Newton-Raphson算法慢。二元搜索具有線性收斂性,而牛頓 - 拉夫遜具有二次收斂性。 –
+0
同意@ChrisTaylor ...通過Newton-Raphson的二進制搜索速度非常慢 –
相關問題
- 1. 牛頓拉夫森的初步猜測
- 2. 牛頓拉夫森邏輯迴歸
- 3. 如何應用牛頓拉夫森根來確定函數的根
- 4. 這是牛頓 - 拉夫森方法的正確實現嗎?
- 5. 基於牛頓拉夫森的最大似然估計和矩量法
- 6. matlab中的牛頓拉夫遜方法
- 7. Python中的牛頓拉普森
- 8. 牛頓拉夫森不與某些初始猜測收斂
- 9. 牛頓平方根Java程序
- 10. 如何檢測牛頓拉夫遜方法中的循環C
- 11. 有效地爲立方根提供牛頓迭代
- 12. 實現牛頓法求平方根算法的複雜性
- 13. MATLAB:調試牛頓拉夫遜法
- 14. 實現牛頓 - 拉夫遜迭代法
- 15. 平方根(牛頓算法)使用遞歸
- 16. 有效運行牛頓算法
- 17. 牛頓 - 拉夫森線性化?二階非線性ODE numpy的-SciPy的Python的
- 18. 牛頓方法pth根 - MATLAB
- 19. 牛頓法求平方根的邏輯有什麼問題?
- 20. 什麼是牛頓 - 拉夫遜方法的時間複雜性?
- 21. 需要幫助如何計算十六進制地址大小
- 22. 使用牛頓的方法找到平方根(錯誤!)
- 23. 邏輯錯誤,當使用牛頓 - 拉夫遜方法在Python
- 24. 計算平方根到50個地方
- 25. Scheme或Common Lisp中的牛頓平方根法
- 26. 平方根計算
- 27. 如何根據位數計算精度的十進制數字?
- 28. 如何計算十六進制乘法?
- 29. 牛頓迭代尋根
- 30. 計算2的平方根
牛頓法的二次收斂很難被打敗。只要確保,你從平方根的一個好初始估計開始。以雙精度計算的平方根可能是一個好的開始。 – Henry
@Naman對於使用pow函數的是什麼? –
@VikramBhat我正在使用這個實現http://stackoverflow.com/questions/13649703/square-root-of-bigdecimal-in-java – Naman