Averages/Pythagorean means: Difference between revisions
Content added Content deleted
(Added a V implementation) |
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
||
Line 465: | Line 465: | ||
return 0; |
return 0; |
||
}</lang> |
}</lang> |
||
=={{header|C++}}== |
|||
<lang cpp>#include <vector> |
|||
#include <iostream> |
|||
#include <numeric> |
|||
#include <cmath> |
|||
#include <algorithm> |
|||
double toInverse ( int i ) { |
|||
return 1.0 / i ; |
|||
} |
|||
int main( ) { |
|||
std::vector<int> numbers ; |
|||
for ( int i = 1 ; i < 11 ; i++ ) |
|||
numbers.push_back( i ) ; |
|||
double arithmetic_mean = std::accumulate( numbers.begin( ) , numbers.end( ) , 0 ) / 10.0 ; |
|||
double geometric_mean = |
|||
pow( std::accumulate( numbers.begin( ) , numbers.end( ) , 1 , std::multiplies<int>( ) ), 0.1 ) ; |
|||
std::vector<double> inverses ; |
|||
inverses.resize( numbers.size( ) ) ; |
|||
std::transform( numbers.begin( ) , numbers.end( ) , inverses.begin( ) , toInverse ) ; |
|||
double harmonic_mean = 10 / std::accumulate( inverses.begin( ) , inverses.end( ) , 0.0 ); //initial value of accumulate must be a double! |
|||
std::cout << "The arithmetic mean is " << arithmetic_mean << " , the geometric mean " |
|||
<< geometric_mean << " and the harmonic mean " << harmonic_mean << " !\n" ; |
|||
return 0 ; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>The arithmetic mean is 5.5 , the geometric mean 4.52873 and the harmonic mean 3.41417 !</pre> |
|||
=={{header|C sharp|C#}}== |
=={{header|C sharp|C#}}== |
||
Line 539: | Line 510: | ||
Geometric mean 4.52872868811677 |
Geometric mean 4.52872868811677 |
||
Harmonic mean 3.41417152147406</pre> |
Harmonic mean 3.41417152147406</pre> |
||
=={{header|C++}}== |
|||
<lang cpp>#include <vector> |
|||
#include <iostream> |
|||
#include <numeric> |
|||
#include <cmath> |
|||
#include <algorithm> |
|||
double toInverse ( int i ) { |
|||
return 1.0 / i ; |
|||
} |
|||
int main( ) { |
|||
std::vector<int> numbers ; |
|||
for ( int i = 1 ; i < 11 ; i++ ) |
|||
numbers.push_back( i ) ; |
|||
double arithmetic_mean = std::accumulate( numbers.begin( ) , numbers.end( ) , 0 ) / 10.0 ; |
|||
double geometric_mean = |
|||
pow( std::accumulate( numbers.begin( ) , numbers.end( ) , 1 , std::multiplies<int>( ) ), 0.1 ) ; |
|||
std::vector<double> inverses ; |
|||
inverses.resize( numbers.size( ) ) ; |
|||
std::transform( numbers.begin( ) , numbers.end( ) , inverses.begin( ) , toInverse ) ; |
|||
double harmonic_mean = 10 / std::accumulate( inverses.begin( ) , inverses.end( ) , 0.0 ); //initial value of accumulate must be a double! |
|||
std::cout << "The arithmetic mean is " << arithmetic_mean << " , the geometric mean " |
|||
<< geometric_mean << " and the harmonic mean " << harmonic_mean << " !\n" ; |
|||
return 0 ; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>The arithmetic mean is 5.5 , the geometric mean 4.52873 and the harmonic mean 3.41417 !</pre> |
|||
=={{header|Clojure}}== |
|||
<lang Clojure>(use '[clojure.contrib.math :only (expt)]) |
|||
(defn a-mean [coll] |
|||
(/ (apply + coll) (count coll))) |
|||
(defn g-mean [coll] |
|||
(expt (apply * coll) (/ (count coll)))) |
|||
(defn h-mean [coll] |
|||
(/ (count coll) (apply + (map / coll)))) |
|||
(let [numbers (range 1 11) |
|||
a (a-mean numbers) g (g-mean numbers) h (h-mean numbers)] |
|||
(println a ">=" g ">=" h) |
|||
(>= a g h))</lang> |
|||
=={{header|CoffeeScript}}== |
=={{header|CoffeeScript}}== |
||
Line 580: | Line 597: | ||
(format t "g-mean ~a~%" g-mean) |
(format t "g-mean ~a~%" g-mean) |
||
(format t "h-mean ~a~%" h-mean)))</lang> |
(format t "h-mean ~a~%" h-mean)))</lang> |
||
=={{header|Clojure}}== |
|||
<lang Clojure>(use '[clojure.contrib.math :only (expt)]) |
|||
(defn a-mean [coll] |
|||
(/ (apply + coll) (count coll))) |
|||
(defn g-mean [coll] |
|||
(expt (apply * coll) (/ (count coll)))) |
|||
(defn h-mean [coll] |
|||
(/ (count coll) (apply + (map / coll)))) |
|||
(let [numbers (range 1 11) |
|||
a (a-mean numbers) g (g-mean numbers) h (h-mean numbers)] |
|||
(println a ">=" g ">=" h) |
|||
(>= a g h))</lang> |
|||
=={{header|D}}== |
=={{header|D}}== |
||
Line 926: | Line 926: | ||
3,414171521 |
3,414171521 |
||
</pre> |
</pre> |
||
=={{header|F_Sharp|F#}}== |
=={{header|F_Sharp|F#}}== |
||
Line 1,171: | Line 1,170: | ||
geomean(v); |
geomean(v); |
||
# 4.52873</lang> |
# 4.52873</lang> |
||
=={{header|Go}}== |
=={{header|Go}}== |
||
<lang go>package main |
<lang go>package main |
||
Line 1,760: | Line 1,760: | ||
end if |
end if |
||
</lang> |
</lang> |
||
=={{header|Logo}}== |
=={{header|Logo}}== |
||
<lang logo>to compute_means :count |
<lang logo>to compute_means :count |
||
Line 1,798: | Line 1,799: | ||
print(a, g, h) |
print(a, g, h) |
||
assert(a >= g and g >= h)</lang> |
assert(a >= g and g >= h)</lang> |
||
=={{header|M2000 Interpreter}}== |
=={{header|M2000 Interpreter}}== |
||
Dimension(m,0) is the base (lower bound) for each dimension in an array, and can be 0 or 1. |
Dimension(m,0) is the base (lower bound) for each dimension in an array, and can be 0 or 1. |
||
Line 2,162: | Line 2,164: | ||
H(1 .. 10): 3.41417152147 |
H(1 .. 10): 3.41417152147 |
||
</pre> |
</pre> |
||
=={{header|Objeck}}== |
=={{header|Objeck}}== |
||
{{trans|Java}} |
{{trans|Java}} |
||
Line 2,431: | Line 2,434: | ||
print "A=$a\nG=$g\nH=$h\n"; |
print "A=$a\nG=$g\nH=$h\n"; |
||
die "Error" unless $a >= $g and $g >= $h;</lang> |
die "Error" unless $a >= $g and $g >= $h;</lang> |
||
=={{header|Perl 6}}== |
|||
{{works with|Rakudo|2015.12}} |
|||
<lang perl6>sub A { ([+] @_) / @_ } |
|||
sub G { ([*] @_) ** (1 / @_) } |
|||
sub H { @_ / [+] 1 X/ @_ } |
|||
say "A(1,...,10) = ", A(1..10); |
|||
say "G(1,...,10) = ", G(1..10); |
|||
say "H(1,...,10) = ", H(1..10); |
|||
</lang> |
|||
{{out}} |
|||
<pre>A(1,...,10) = 5.5 |
|||
G(1,...,10) = 4.52872868811677 |
|||
H(1,...,10) = 3.41417152147406</pre> |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |
||
Line 2,784: | Line 2,770: | ||
#t |
#t |
||
</pre> |
</pre> |
||
=={{header|Raku}}== |
|||
(formerly Perl 6) |
|||
{{works with|Rakudo|2015.12}} |
|||
<lang perl6>sub A { ([+] @_) / @_ } |
|||
sub G { ([*] @_) ** (1 / @_) } |
|||
sub H { @_ / [+] 1 X/ @_ } |
|||
say "A(1,...,10) = ", A(1..10); |
|||
say "G(1,...,10) = ", G(1..10); |
|||
say "H(1,...,10) = ", H(1..10); |
|||
</lang> |
|||
{{out}} |
|||
<pre>A(1,...,10) = 5.5 |
|||
G(1,...,10) = 4.52872868811677 |
|||
H(1,...,10) = 3.41417152147406</pre> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
Line 3,059: | Line 3,063: | ||
H(1,...,10) = 3.414171521474055006096734859775098225173</pre> |
H(1,...,10) = 3.414171521474055006096734859775098225173</pre> |
||
=={{header|SQL}}== |
|||
It may not be possible to calculate a geometric mean in a query, but the other two are easy enough. |
|||
<lang sql> |
|||
--setup |
|||
create table averages (val integer); |
|||
insert into averages values (1); |
|||
insert into averages values (2); |
|||
insert into averages values (3); |
|||
insert into averages values (4); |
|||
insert into averages values (5); |
|||
insert into averages values (6); |
|||
insert into averages values (7); |
|||
insert into averages values (8); |
|||
insert into averages values (9); |
|||
insert into averages values (10); |
|||
-- calculate means |
|||
select |
|||
1/avg(1/val) as harm, |
|||
avg(val) as arith |
|||
from |
|||
averages; |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
HARM ARITH |
|||
---------- ---------- |
|||
3.41417152 5.5 |
|||
</pre> |
|||
=={{header|Smalltalk}}== |
=={{header|Smalltalk}}== |
||
{{works with|GNU Smalltalk}} |
{{works with|GNU Smalltalk}} |
||
Line 3,126: | Line 3,102: | ||
true |
true |
||
true</pre> |
true</pre> |
||
=={{header|SQL}}== |
|||
It may not be possible to calculate a geometric mean in a query, but the other two are easy enough. |
|||
<lang sql> |
|||
--setup |
|||
create table averages (val integer); |
|||
insert into averages values (1); |
|||
insert into averages values (2); |
|||
insert into averages values (3); |
|||
insert into averages values (4); |
|||
insert into averages values (5); |
|||
insert into averages values (6); |
|||
insert into averages values (7); |
|||
insert into averages values (8); |
|||
insert into averages values (9); |
|||
insert into averages values (10); |
|||
-- calculate means |
|||
select |
|||
1/avg(1/val) as harm, |
|||
avg(val) as arith |
|||
from |
|||
averages; |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
HARM ARITH |
|||
---------- ---------- |
|||
3.41417152 5.5 |
|||
</pre> |
|||
=={{header|Stata}}== |
=={{header|Stata}}== |
||
Line 3,140: | Line 3,145: | ||
| Harmonic 10 3.414172 2.035664 10.57602 |
| Harmonic 10 3.414172 2.035664 10.57602 |
||
-----------------------------------------------------------------------------</lang> |
-----------------------------------------------------------------------------</lang> |
||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
||
<lang tcl>proc arithmeticMean list { |
<lang tcl>proc arithmeticMean list { |