Calcolare Pi greco con Fortress e l'Ago di Buffon

E' disponibile da oggi il nuovo sito e la release 1.0 del linguaggio Fortress (già discusso qui).

La sintassi del linguaggio è molto simile a quella della matematica ed è infatti possibile (utilizzando l'utility fortify che fa parte della distribuzione di Fortress) esportare un sorgente in formato LaTeX.

Ecco un esempio di un programma Fortress che approssima Pi greco utilizzando l'Ago di Buffon (per chi è interessato qui c'è un ulteriore metodo basato sul caso, scritto in Perl). Questo algoritmo si basa sulla relazione che esiste tra Pi greco e la probabilità che un ago, lanciato su un piano percorso da rette tra loro parallele ed equidistanti, intersechi o meno una delle rette.

Il sorgente è tratto dalle demo incluse nella distribuzione di Fortress:

run(args:String...):()=do
needleLength = 20
numRows = 10
tableHeight = needleLength numRows
var hits : RR64 = 0.0
var n : RR64 = 0.0

println("Starting parallel Buffons")
recordTime(6.0)
for i <- 1#3000 do
delta_X = random(2.0) - 1
delta_Y = random(2.0) - 1
rsq = delta_X\^2 + delta_Y\^2
if 0 < rsq < 1 then
y1 = tableHeight random(1.0)
y2 = y1 + needleLength (delta_Y / sqrt(rsq))
(y_L, y_H) = (y1 MIN y2, y1 MAX y2)
if ceiling(y_L/needleLength) = floor(y_H/needleLength) then
atomic do hits += 1.0 end
end
atomic do n += 1.0 end
end
end
probability = hits/n
pi_est = 2.0/probability
printTime(6.0)
println("")
print("estimated Pi = ")
println(pi_est)
end
end

Ecco lo stesso sorgente come output del LaTeX:

Ecco l'output del programma buffons.fss (con 3.000 iterazioni l'algoritmo non converge molto bene): 

$ ~user/Test/fortress-1.0/bin/fortress demos/buffons.fss 
guessing FORTRESS_HOME=/Users/user/Test/fortress-1.0/bin/..
Starting parallel Buffons
Operation took 689ms

estimated Pi = 3.132848645076008
Comments:

[Trackback] E' disponibile la release 1.0 del linguaggio Fortress. La sintassi del linguaggio è molto simile a quella della matematica ed è infatti possibile (utilizzando l'utility fortify che fa parte della distribuzione di Fortress) esportare un sorgente in form...

Posted by diggita.it on aprile 08, 2008 at 07:22 AM CEST #

Post a Comment:
  • HTML Syntax: NOT allowed
About

Un diario digitale sui miei interessi: Internet, Solaris, Java, Fotografia, ecc.

Search

Archives
« aprile 2014
lunmarmergiovensabdom
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today