今天两个同事用JAVA实现圆周率一百位小数的实现。一个同事问我要不要试试,由于很长时间没有写过JAVA代码,而且本身JAVA的水平就很差,于是打算用ORACLE实现。
其实Oracle中使用现成的函数就可以直接到的圆周率,比如:
SQL> SELECT ACOS(-1) FROM DUAL;
ACOS(-1)
----------
3.14159265
可以通过调整数值类型的参数来获取38位精度:
SQL> SET NUMW 40
SQL> SELECT ACOS(-1) PI FROM DUAL;
PI
----------------------------------------
3.1415926535897932384626433832795028842
如果不能使用现成的函数,而要自己计算,则要麻烦一些。
当时同事问我的时候,我告诉他一分种左右就可以搞定,而实际证明,写这个代码用了5分钟左右:
SQL> CREATE OR REPLACE PROCEDURE P_PI wrapped
2 a000000
3 1
4 abcd
5 abcd
6 abcd
7 abcd
8 abcd
9 abcd
10 abcd
11 abcd
12 abcd
13 abcd
14 abcd
15 abcd
16 abcd
17 abcd
18 abcd
19 7
20 ec 11f
21 bLpzn0N21EJAQZmxUW0FNNv3TiEwgwDQ7UhqfC/WmGCua2Lf0zZFLKG/pZHGJ/bKzDYxl/z+
22 qm17DFusHSThkSZkEuy6LmGKASmXQXlIcj5c2rC7LQDfmeLEhifcu+/Euy0ZqsYYpFeKtfeC
23 Vamv1TmuhyHFqL1bdFkURszthPM58C+Jwz4juIdQ3pEBIhhdUWdwH2nhe8wAWXYtDklgqX3m
24 d05w6NIDkQvcTtJx/uoF8gVIBzPG8V7EYd5VJ/6IIw24DU+CH20QJHWJwe4eKG3j3/I=
25
26 /
过程已创建。
这时10.2版本下WRAP后的过程,利用这个代码可以返回圆周率100位以内的任意位小数:
SQL> SET SERVEROUT ON
SQL> EXEC P_PI
3.1415926535
PL/SQL 过程已成功完成。
SQL> EXEC P_PI(1)
3.1
PL/SQL 过程已成功完成。
SQL> EXEC P_PI(5)
3.14159
PL/SQL 过程已成功完成。
SQL> EXEC P_PI(38)
3.14159265358979323846264338327950288419
PL/SQL 过程已成功完成。
SQL> EXEC P_PI(100)
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706
PL/SQL 过程已成功完成。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-428174/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-428174/