Oracle中實現圓周率計算(三)
今天兩個同事用JAVA實現圓周率一百位小數的實現。一個同事問我要不要試試,由於很長時間沒有寫過JAVA程式碼,而且本身JAVA的水平就很差,於是打算用ORACLE實現。
這篇給出一個真正的演算法。
Oracle中實現圓周率計算(一):http://yangtingkun.itpub.net/post/468/468799
Oracle中實現圓周率計算(二):http://yangtingkun.itpub.net/post/468/468870
上一篇文章提到,Oracle的NUMBER型別精度只有38位,因此想要確保100位的精度就無法直接使用Oracle的NUMBER型別來實現了。
如果在Oracle希望實現這個功能,那麼最簡單的辦法莫過於使用JAVA儲存過程了,下面演算法不變,將程式碼遷移到JAVA儲存過程中:
SQL> create or replace and compile java source named "pi" as
2 import java.math.BigDecimal;
3 public class pi extends Object
4 {
5 public static String pi (int n)
6 {
7 BigDecimal result = new BigDecimal(1);
8 for (int i=n;i>0;i--)
9 {
10 BigDecimal temp = new BigDecimal(i);
11 result = new BigDecimal(2).add
12 (result.multiply
13 (temp.divide(new BigDecimal(1).add
14 (temp.multiply
15 (new BigDecimal(2))
16 ),102,BigDecimal.ROUND_HALF_UP)
17 )
18 );
19 }
20 return result.toString().substring(0,102);
21 }
22 }
23 /
Java 已建立。
建立儲存過程後,在建立一個PL/SQL函式介面:
SQL> create or replace function f_pi (p_n in number) return varchar2 as
2 language java name 'pi.pi(int) return String';
3 /
函式已建立。
下面就可以呼叫這個JAVA儲存過程進行運算了:
SQL> SELECT F_PI(10) FROM DUAL;
F_PI(10)
--------------------------------------------------------------------------------------------------------
3.1408420956408572507643715074055631331173126838761513684114303309349748978231950368173278389996656250
SQL> SELECT F_PI(100) FROM DUAL;
F_PI(100)
--------------------------------------------------------------------------------------------------------
3.1415926535897932384626433832792952864908441267910666216977616133327809721178539595244159254337299498
在多項式N達到330的時候,返回的圓周率精度到了100位。
SQL> SELECT F_PI(329) FROM DUAL;
F_PI(329)
--------------------------------------------------------------------------------------------------------
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170678
SQL> SELECT F_PI(330) FROM DUAL;
F_PI(330)
--------------------------------------------------------------------------------------------------------
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-430036/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中實現圓周率計算(二)Oracle
- Oracle中實現圓周率計算(一)Oracle
- 圓周率的計算 (轉)
- VB計算圓周率的方法
- 幾種計算圓周率的軟體比較
- 使用Kubernetes裡的job計算圓周率後2000位
- PLSQL實現計算圓的面積SQL
- 圓周率π的計算曆程及各種腦洞大開的估計方法
- Google:Google Cloud再次打破了百萬億位的圓周率計算紀錄GoCloud
- 如何用python求圓周率?Python
- 蒙特卡羅法求圓周率
- 新紀錄!谷歌 Cloud 計算出圓周率“ π” 第 100 萬億位數谷歌Cloud
- 蒙特卡羅演算法求圓周率Pi的值演算法
- 【倉頡】入門文件程式碼圓周率估算程式碼更正
- [計算幾何]圓與三角形是否相交
- ios實現圖片圓角方式小計iOS
- Android 圓角、圓形 ImageView 實現AndroidView
- 橢圓曲線加法原理計算
- 計算圓的面積程式碼
- 如何實現邊緣計算中的節點自治
- 機器學習中那些相似度的計算方法及實現機器學習
- ACCESS 在資料表中實現簡單計算
- 計算機網路實驗三計算機網路
- Oracle實現統計Oracle
- Android Xfermode 實戰 實現圓形、圓角圖片Android
- js實現四則計算(中綴,字尾表示式)JS
- UIImageView 實現圓角效果UIView
- 【TUNE_ORACLE】Oracle索引設計思想(三)過濾因子概述與計算Oracle索引
- css實現圓形、橢圓和半圓效果程式碼例項CSS
- 12條語句學會oracle cbo計算(三)Oracle
- 三種語言實現計算二進位制中1的個數(C++/Python/Java)C++PythonJava
- 在相親原始碼開發中,如何實現圓角及特殊圓角的使用?原始碼
- Oracle中實現連乘Oracle
- oracle實驗記錄 (oracle consistent gets 計算)Oracle
- 在Java中實現浮點數的精確計算 (轉)Java
- 一個比想象中更騷氣的圓-svg實現SVG
- 用Python實現《計算的本質:深入剖析程式和計算機》中的程式碼Python計算機
- java 根據經緯度計算圓周Java