September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

View file

@ -0,0 +1,2 @@
agd{(-)<10*¯8:((+)÷2)(×)*÷2}
1 agd ÷2*÷2

View file

@ -31,26 +31,19 @@ end run
-- GENERIC
-- GENERIC FUNCTIONS
-- until :: (a -> Bool) -> (a -> a) -> a -> a
on |until|(p, f, x)
set mp to mReturn(p)
set mf to mReturn(f)
set v to x
script
property p : mp's lambda
property f : mf's lambda
on lambda(v)
repeat until p(v)
set v to f(v)
end repeat
return v
end lambda
end script
result's lambda(x)
tell mReturn(f)
repeat until mp's lambda(v)
set v to lambda(v)
end repeat
end tell
return v
end |until|
-- Lift 2nd class handler function into 1st class script wrapper

View file

@ -0,0 +1,25 @@
/* Calculate the arithmethic-geometric mean of two positive
* numbers x and y.
* Result will have d digits after the decimal point.
*/
define m(x, y, d) {
auto a, g, o
o = scale
scale = d
d = 1 / 10 ^ d
a = (x + y) / 2
g = sqrt(x * y)
while ((a - g) > d) {
x = (a + g) / 2
g = sqrt(a * g)
a = x
}
scale = o
return(a)
}
scale = 20
m(1, 1 / sqrt(2), 20)

View file

@ -1,9 +1,9 @@
import std.stdio, std.math, std.typecons, std.typetuple;
import std.stdio, std.math, std.meta, std.typecons;
real agm(real a, real g, in int bitPrecision=60) pure nothrow @nogc @safe {
do {
//{a, g} = {(a + g) / 2.0, sqrt(a * g)};
TypeTuple!(a, g) = tuple((a + g) / 2.0, sqrt(a * g));
AliasSeq!(a, g) = tuple((a + g) / 2.0, sqrt(a * g));
} while (feqrel(a, g) < bitPrecision);
return a;
}

View file

@ -1,6 +1,11 @@
import "futlib/math"
fun agm(a: f64, g: f64): f64 =
let eps = 1.0E-16
loop ((a,g)) = while abs(a-g) > eps do
loop ((a,g)) = while f64.abs(a-g) > eps do
((a+g) / 2.0,
sqrt64 (a*g))
f64.sqrt (a*g))
in a
fun main(x: f64, y: f64): f64 =
agm(x,y)

View file

@ -1,19 +0,0 @@
package main
import (
"fmt"
"math"
)
const ε = 1e-14
func agm(a, g float64) float64 {
for math.Abs(a-g) > math.Abs(a)*ε {
a, g = (a+g)*.5, math.Sqrt(a*g)
}
return a
}
func main() {
fmt.Println(agm(1, 1/math.Sqrt2))
}

View file

@ -1,21 +0,0 @@
package main
import (
"fmt"
"math"
"math/cmplx"
)
const ε = 1e-14
func agm(a, g complex128) complex128 {
for cmplx.Abs(a-g) > cmplx.Abs(a)*ε {
a, g = (a+g)*.5, cmplx.Rect(math.Sqrt(cmplx.Abs(a)*cmplx.Abs(g)),
(cmplx.Phase(a)+cmplx.Phase(g))*.5)
}
return a
}
func main() {
fmt.Println(agm(1, 1/math.Sqrt2))
}

View file

@ -1,25 +1,23 @@
/*
* Arithmetic-Geometric Mean of 1 & 1/sqrt(2)
* Brendan Shaklovitz
* 5/29/12
*/
public class ArithmeticGeometricMean {
Arithmetic-Geometric Mean of 1 & 1/sqrt(2)
Brendan Shaklovitz
5/29/12
*/
public class ArithmeticMean {
public static void agm (double a, double g){
double a1 = a;
double g1 = g;
while (Math.abs(a1-g1) >= Math.pow(10, -14)){
double aTemp = (a1+g1)/2.0;
g1 = Math.sqrt(a1*g1);
a1 = aTemp;
}
System.out.println(a1);
public static double agm(double a, double g) {
double a1 = a;
double g1 = g;
while (Math.abs(a1 - g1) >= 1.0e-14) {
double arith = (a1 + g1) / 2.0;
double geom = Math.sqrt(a1 * g1);
a1 = arith;
g1 = geom;
}
return a1;
}
public static void main(String[] args){
agm(1,1/Math.sqrt(2));
}
public static void main(String[] args) {
System.out.println(agm(1.0, 1.0 / Math.sqrt(2.0)));
}
}

View file

@ -0,0 +1,19 @@
// version 1.0.5-2
fun agm(a: Double, g: Double): Double {
var aa = a // mutable 'a'
var gg = g // mutable 'g'
var ta: Double // temporary variable to hold next iteration of 'aa'
val epsilon = 1.0e-16 // tolerance for checking if limit has been reached
while (true) {
ta = (aa + gg) / 2.0
if (Math.abs(aa - ta) <= epsilon) return ta
gg = Math.sqrt(aa * gg)
aa = ta
}
}
fun main(args: Array<String>) {
println(agm(1.0, 1.0 / Math.sqrt(2.0)))
}

View file

@ -11,4 +11,4 @@ proc agm(a, g: float,delta: float = 1.0e-15): float =
aOld = aNew
result = aOld
echo ($agm(1.0,1.0/sqrt(2)))
echo $agm(1.0,1.0/sqrt(2.0))

View file

@ -14,7 +14,7 @@ proc agm(x,y: float): tuple[resA,resG: float] =
(a[23], g[23])
var t = agm(1, 1/sqrt(2))
var t = agm(1, 1/sqrt(2.0))
echo("Result A: " & formatFloat(t.resA, ffDecimal, 24))
echo("Result G: " & formatFloat(t.resG, ffDecimal, 24))

View file

@ -1,14 +0,0 @@
import math
proc agm(a, g: float,delta: float = 1.0e-15): float =
var
aNew: float = 0
aOld: float = a
gOld: float = g
while (abs(aOld - gOld) > delta):
aNew = 0.5 * (aOld + gOld)
gOld = sqrt(aOld * gOld)
aOld = aNew
result = aOld
echo ($agm(1.0,1.0/sqrt(2)))

View file

@ -0,0 +1,18 @@
say agm(1, 1/rxcalcsqrt(2))
::routine agm
use strict arg a, g
numeric digits 20
a1 = a
g1 = g
loop while abs(a1 - g1) >= 1e-14
temp = (a1 + g1)/2
g1 = rxcalcsqrt(a1 * g1)
a1 = temp
end
numeric digits 9
return a1+0
::requires rxmath LIBRARY

View file

@ -0,0 +1,10 @@
(define agm
(case-lambda
((a0 g0) ; call again with default value for tolerance
(agm a0 g0 1e-8))
((a0 g0 tolerance) ; called with three arguments
(do ((a a0 (* (+ a g) 1/2))
(g g0 (sqrt (* a g))))
((< (abs (- a g)) tolerance) a)))))
(display (agm 1 (/ 1 (sqrt 2)))) (newline)

View file

@ -0,0 +1,13 @@
import <Utilities/Math.sl>;
agm(a, g) :=
let
iota := 1.0e-15;
arithmeticMean := 0.5 * (a + g);
geometricMean := sqrt(a * g);
in
a when abs(a-g) < iota
else
agm(arithmeticMean, geometricMean);
main := agm(1.0, 1.0 / sqrt(2));

View file

@ -1,8 +1,8 @@
func agm(a, g) {
loop {
var x = [float(a+g / 2), sqrt(a*g)]
x == [a, g] && return a
x >> \(a, g)
var (a1, g1) = ((a+g)/2, sqrt(a*g))
[a1,g1] == [a,g] && return a
(a, g) = (a1, g1)
}
}

View file

@ -0,0 +1,11 @@
10 LET A=1
20 LET G=1/SQR 2
30 GOSUB 100
40 PRINT AGM
50 STOP
100 LET A0=A
110 LET A=(A+G)/2
120 LET G=SQR (A0*G)
130 IF ABS(A-G)>.00000001 THEN GOTO 100
140 LET AGM=A
150 RETURN

View file

@ -0,0 +1,14 @@
mata
real scalar agm(real scalar a, real scalar b) {
real scalar c
do {
c=0.5*(a+b)
b=sqrt(a*b)
a=c
} while (a-b>1e-15*a)
return(0.5*(a+b))
}
agm(1,1/sqrt(2))
end

View file

@ -0,0 +1,31 @@
import Darwin
enum AGRError : Error {
case undefined
}
func agm(_ a: Double, _ g: Double, _ iota: Double = 1e-8) throws -> Double {
var a = a
var g = g
var a1: Double = 0
var g1: Double = 0
guard a * g >= 0 else {
throw AGRError.undefined
}
while abs(a - g) > iota {
a1 = (a + g) / 2
g1 = sqrt(a * g)
a = a1
g = g1
}
return a
}
do {
try print(agm(1, 1 / sqrt(2)))
} catch {
print("agr is undefined when a * g < 0")
}

View file

@ -0,0 +1,5 @@
a:=1.0; g:=1.0/(2.0).sqrt();
while(not a.closeTo(g,1.0e-15)){
a1:=(a+g)/2.0; g=(a*g).sqrt(); a=a1;
println(a," ",g," ",a-g);
}

View file

@ -0,0 +1,3 @@
fcn(a=1.0, g=1.0/(2.0).sqrt()){ println(a," ",g," ",a-g);
if(a.closeTo(g,1.0e-15)) return(a) else return(self.fcn((a+g)/2.0, (a*g).sqrt()));
}()