package main import . "fmt" import "math/rand" import "os" import "strconv" import "math" func iperb(x float64) float64 { return 1. / x } func seno(x float64) float64 { return math.Sin(x) } const n = 100000 func montecarlo(a, b, l float64, g func(float64) float64) float64 { c := 0 for i := 0; i < n; i++ { x := a + (b-a) * rand.Float64() y := l * rand.Float64() if g(x) >= y { c++ } } return float64(c) / n * (b-a) * l } func main() { // Provare, per esempio, con argomenti 1 2 4 a, _ := strconv.ParseFloat(os.Args[1], 64) // Estremo sinistro b, _ := strconv.ParseFloat(os.Args[2], 64) // Estremo destro l, _ := strconv.ParseFloat(os.Args[3], 64) // Limite superiore ai valori delle funzioni Println(montecarlo(a, b, l, iperb)) Println(montecarlo(a, b, l, seno)) Println(montecarlo(a, b, l, func(x float64) float64 { return x*x })) }