2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -0,0 +1,10 @@
|
|||
function agm(a0, g0) {
|
||||
var an = (a0 + g0) / 2,
|
||||
gn = Math.sqrt(a0 * g0);
|
||||
while (Math.abs(an - gn) > tolerance) {
|
||||
an = (an + gn) / 2, gn = Math.sqrt(an * gn)
|
||||
}
|
||||
return an;
|
||||
}
|
||||
|
||||
agm(1, 1 / Math.sqrt(2));
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
(() => {
|
||||
'use strict';
|
||||
|
||||
// ARITHMETIC-GEOMETRIC MEAN
|
||||
|
||||
// agm :: Num a => a -> a -> a
|
||||
let agm = (a, g) => {
|
||||
let abs = Math.abs,
|
||||
sqrt = Math.sqrt;
|
||||
|
||||
return until(
|
||||
m => abs(m.an - m.gn) < tolerance,
|
||||
m => {
|
||||
return {
|
||||
an: (m.an + m.gn) / 2,
|
||||
gn: sqrt(m.an * m.gn)
|
||||
};
|
||||
}, {
|
||||
an: (a + g) / 2,
|
||||
gn: sqrt(a * g)
|
||||
}
|
||||
)
|
||||
.an;
|
||||
},
|
||||
|
||||
// GENERIC
|
||||
|
||||
// until :: (a -> Bool) -> (a -> a) -> a -> a
|
||||
until = (p, f, x) => {
|
||||
let v = x;
|
||||
while (!p(v)) v = f(v);
|
||||
return v;
|
||||
};
|
||||
|
||||
|
||||
// TEST
|
||||
|
||||
let tolerance = 0.000001;
|
||||
|
||||
|
||||
return agm(1, 1 / Math.sqrt(2));
|
||||
|
||||
})();
|
||||
|
|
@ -0,0 +1 @@
|
|||
0.8472130848351929
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
function agm(a0,g0){
|
||||
var an=(a0+g0)/2,gn=Math.sqrt(a0*g0);
|
||||
while(Math.abs(an-gn)>tolerance){
|
||||
an=(an+gn)/2,gn=Math.sqrt(an*gn)
|
||||
}
|
||||
return an;
|
||||
}
|
||||
|
||||
agm(1,1/Math.sqrt(2));
|
||||
Loading…
Add table
Add a link
Reference in a new issue