Oracle中实现圆周率计算(一)


 今天两个同事用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 过程已成功完成

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3