Averages/Arithmetic mean: Difference between revisions
Content added Content deleted
(Add Brat solution) |
(Go solution) |
||
Line 465: | Line 465: | ||
Mean([3, 1, 4, 1, 5, 9]); |
Mean([3, 1, 4, 1, 5, 9]); |
||
# 23/6</lang> |
# 23/6</lang> |
||
=={{header|Go}}== |
|||
<lang go>package main |
|||
import ( |
|||
"fmt" |
|||
"math" |
|||
) |
|||
func mean(v []float64) float64 { |
|||
if len(v) == 0 { |
|||
return 0 |
|||
} |
|||
var parts []float64 |
|||
for _, x := range v { |
|||
var i int |
|||
for _, p := range parts { |
|||
sum := p + x |
|||
var err float64 |
|||
if math.Fabs(x) < math.Fabs(p) { |
|||
err = x - (sum - p) |
|||
} else { |
|||
err = p - (sum - x) |
|||
} |
|||
if err != 0 { |
|||
parts[i] = err |
|||
i++ |
|||
} |
|||
x = sum |
|||
} |
|||
parts = append(parts[:i], x) |
|||
} |
|||
var sum float64 |
|||
for _, x := range parts { |
|||
sum += x |
|||
} |
|||
return sum / float64(len(v)) |
|||
} |
|||
func main() { |
|||
for _, v := range [][]float64{ |
|||
[]float64{}, // answer is 0 per task description |
|||
[]float64{3, 1, 4, 1, 5, 9}, |
|||
[]float64{1e20, 3, 1, 4, 1, 5, 9, -1e20}, |
|||
[]float64{10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, .11}, |
|||
[]float64{10, 20, 30, 40, 50, -100, 4.7, -11e2}, |
|||
} { |
|||
fmt.Println("Vector:", v) |
|||
fmt.Printf("Mean of %d numbers is %g\n\n", len(v), mean(v)) |
|||
} |
|||
}</lang> |
|||
Output: |
|||
<pre>Vector: [] |
|||
Mean of 0 numbers is 0 |
|||
Vector: [3 1 4 1 5 9] |
|||
Mean of 6 numbers is 3.8333333333333335 |
|||
Vector: [1e+20 3 1 4 1 5 9 -1e+20] |
|||
Mean of 8 numbers is 2.875 |
|||
Vector: [10 9 8 7 6 5 4 3 2 1 0 0 0 0 0.11] |
|||
Mean of 15 numbers is 3.674 |
|||
Vector: [10 20 30 40 50 -100 4.7 -1100] |
|||
Mean of 8 numbers is -130.6625</pre> |
|||
=={{header|Groovy}}== |
=={{header|Groovy}}== |