Oracle中实现圆周率计算
2008-09-02 12:46:00 来源:WEB开发网PL/SQL 过程已成功完成。
小的时候背过圆周率,恰好能背到100位,因此都不用google就可以完成上面的代码。记得大学的时候几个同学去参加一个C语言的编程竞赛,题目就是实现圆周率的计算,由于竞赛不看源码,只关注执行时间,于是几个同学开始分工,一个默写圆周率,另外几个写一个简单的延迟程序,延迟之后直接输出结果就可以了。
扯远了,其实计算圆周率的多项式展开有很多种,随便GOOGLE一下都可以找到一堆,而且还有各种算法的详细说明。
个人认为ORACLE实在不适合来讨论算法,所以只挑了一个比较简单的算法进行计算,多项式为:PI=2+1/3*(2+2/5*(2+3/7*(2+…(2+N/(2N+1))…)))
利用PL/SQL实现代码如下:
SQL>createORREPLACEPROCEDUREP_PI(P_NNUMBERDEFAULT10)AS
2V_RESULTNUMBERDEFAULT1;
3V_countNUMBERDEFAULTP_N;
4BEGIN
5LOOP
6EXITWHENV_count=0;
7V_RESULT:=2+V_count/(2*V_count+1)*V_RESULT;
8V_count:=V_count-1;
9ENDLOOP;
10DBMS_OUTPUT.PUT_LINE(TO_char(V_RESULT));
11END;
12/
过程已创建。
SQL>execP_PI
3.14084209564085725076437150740556313312
PL/SQL 过程已成功完成。
SQL>execP_PI(100)
3.14159265358979323846264338327929528649
PL/SQL 过程已成功完成。
使用这种方法,N为多项式级数,当N为10的时候,精确到小数点后面2位,当N位100时,已经精确到小数点后面30位。
当N的值位126的时候,确保NUMBER精度范围内的值都是准确的:
- ››实现PHP页面静态化
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››实现android 再按一次退出程序代码
赞助商链接