Chinaunix首页 | 论坛 | 博客
  • 博客访问: 528416
  • 博文数量: 855
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 19:08
文章分类

全部博文(855)

文章存档

2011年(1)

2008年(854)

我的朋友

分类:

2008-10-16 19:09:38

   今天两个同事用JAVA实现圆周率一百位小数的实现。一个同事问我要不要试试,由于很长时间没有写过JAVA代码,而且本身JAVA的水平就很差,于是打算用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 过程已成功完成。

【责编:Zenghui】

--------------------next---------------------

阅读(294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~