このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/489
#  [1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク):  
#  
# 円周率 π の値を近似式 
# 
# π ? 4Σ(‐1)^n[{(1/2)^2n+1} +{(1/3)^2n+1}]/( 2 n + 1 ) を用いて小数第8位まで正しい値(3.14159265)を出力し,(Σはn=0。100まで) 
# 
# 
# その π の値を用いて入力された数値 ε に対して,次の不等式を満た 
# す最小の自然数 N を求めるプログラムを作れ. 
# 
# 
# |{π^2}/6-Σ(k=1.N)1/k^2|<ε 
# 
# 
# 
# できる方がいたらやり方を教えてください。

:- op(700,xfx,は).

'π ? 4Σ(‐1)^n[{(1/2)^2n+1} +{(1/3)^2n+1}]/( 2 n + 1 ) を用いて小数第8位まで正しい値(3.14159265)を出力する' :-
        π(X) ,
        write_formatted('%.8f\n',[X]).
        
π(X) :-
        π(0,100,0,X).

π(N,M,X,X) :- N > M,!.
π(N,M,Y,X) :-
        V is 2 * N + 1,
        U1 is ( 1.0 / 2.0 ) ^ V,
        U2 is ( 1.0 / 3.0 ) ^ V,
        W is 4 * ((-1) ^ N) * (U1+U2) / V,
        N2 is N + 1,
        Y2 is Y + W,
        π(N2,M,Y2,X).

'その π の値を用いて入力された数値 ε に対して,次の不等式を満たす最小の自然数Nを求める'(_ε,N) :-
        for(0,N,maxint),
        sigma_1(N,Sigma_1),
        X は abs(π ^ 2 / 6 - Sigma_1),
        X < _ε,!.

sigma_1(N,Sigma_1) :-
        findsum(U,(
                     for(1,K,N),
                     U is 1 / K ^ 2),
                Sigma_1).