有感于OO的号称“最快的计算PI程序”
http://www.itpub.net/viewthread.php?tid=1345414
闲来无事,自己先看看能计算到哪一位。
1.算法
π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...
2. plsql package
create or replace package pkg_pi
as
function fn_item (p_integer integer) return number;
function fn_pi return number;
end pkg_pi;
/
create or replace package body pkg_pi
as
function fn_item (p_integer integer) return number
is
l_exception exception;
begin
if p_integer < 0 then
raise l_exception;
else
return power(-1,p_integer)/(2*p_integer + 1);
end if;
exception when l_exception then
raise_application_error(-20000,'Fatal error,the parameter must not be negative');
end fn_item;
function fn_pi return number
is
l_sum number default 0;
begin
for i in 0..10000000 loop
l_sum := l_sum + fn_item(i);
end loop;
return 4*l_sum;
end fn_pi;
end pkg_pi;
3. 结果
SQL> set timing on;
SQL> select pkg_pi.fn_pi from dual;
FN_PI
----------
3.14159275
Executed in 213.031 seconds