Data update

This commit is contained in:
Ingy döt Net 2026-02-01 16:33:20 -08:00
parent 5150844a7d
commit 4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions

View file

@ -1,48 +0,0 @@
generic
type Real is digits <>;
with function Sqrt(X: Real) return Real;
with function "**"(X: Real; Y: Real) return Real;
package Approximation is
type Number is private;
-- create an approximation
function Approx(Value: Real; Sigma: Real) return Number;
-- unary operations and conversion Real to Number
function "+"(X: Real) return Number;
function "-"(X: Real) return Number;
function "+"(X: Number) return Number;
function "-"(X: Number) return Number;
-- addition / subtraction
function "+"(X: Number; Y: Number) return Number;
function "-"(X: Number; Y: Number) return Number;
-- multiplication / division
function "*"(X: Number; Y: Number) return Number;
function "/"(X: Number; Y: Number) return Number;
-- exponentiation
function "**"(X: Number; Y: Positive) return Number;
function "**"(X: Number; Y: Real) return Number;
-- Output to Standard IO (wrapper for Ada.Text_IO and Ada.Text_IO.Float_IO)
procedure Put_Line(Message: String;
Item: Number;
Value_Fore: Natural := 7;
Sigma_Fore: Natural := 4;
Aft: Natural := 2;
Exp: Natural := 0);
procedure Put(Item: Number;
Value_Fore: Natural := 7;
Sigma_Fore: Natural := 3;
Aft: Natural := 2;
Exp: Natural := 0);
private
type Number is record
Value: Real;
Sigma: Real;
end record;
end Approximation;

View file

@ -1,119 +0,0 @@
with Ada.Text_IO;
package body Approximation is
package RIO is new Ada.Text_IO.Float_IO(Real);
-- create an approximation
function Approx(Value: Real; Sigma: Real) return Number is
begin
return (Value, Sigma);
end Approx;
-- unary operations and conversion Real to Number
function "+"(X: Real) return Number is
begin
return Approx(X, 0.0);
end "+";
function "-"(X: Real) return Number is
begin
return Approx(-X, 0.0);
end "-";
function "+"(X: Number) return Number is
begin
return X;
end "+";
function "-"(X: Number) return Number is
begin
return Approx(-X.Value, X.Sigma);
end "-";
-- addition / subtraction
function "+"(X: Number; Y: Number) return Number is
Z: Number;
begin
Z.Value := X.Value + Y.Value;
Z.Sigma := Sqrt(X.Sigma*X.Sigma + Y.Sigma*Y.Sigma);
return Z;
end "+";
function "-"(X: Number; Y: Number) return Number is
begin
return X + (-Y);
end "-";
-- multiplication / division
function "*"(X: Number; Y: Number) return Number is
Z: Number;
begin
Z.Value := X.Value * Y.Value;
Z.Sigma := Z.Value * Sqrt((X.Sigma/X.Value)**2 + (Y.Sigma/Y.Value)**2);
return Z;
end "*";
function "/"(X: Number; Y: Number) return Number is
Z: Number;
begin
Z.Value := X.Value / Y.Value;
Z.Sigma := Z.Value * Sqrt((X.Sigma/X.Value)**2 + (Y.Sigma/Y.Value)**2);
return Z;
end "/";
-- exponentiation
function "**"(X: Number; Y: Positive) return Number is
Z: Number;
begin
Z.Value := X.Value ** Y ;
Z.Sigma := Z.Value * Real(Y) * (X.Sigma/X.Value);
if Z.Sigma < 0.0 then
Z.Sigma := - Z.Sigma;
end if;
return Z;
end "**";
function "**"(X: Number; Y: Real) return Number is
Z: Number;
begin
Z.Value := X.Value ** Y ;
Z.Sigma := Z.Value * Y * (X.Sigma/X.Value);
if Z.Sigma < 0.0 then
Z.Sigma := - Z.Sigma;
end if;
return Z;
end "**";
-- Output to Standard IO (wrapper for Ada.Text_IO.Float_IO)
procedure Put_Line(Message: String;
Item: Number;
Value_Fore: Natural := 7;
Sigma_Fore: Natural := 4;
Aft: Natural := 2;
Exp: Natural := 0) is
begin
Ada.Text_IO.Put(Message);
Put(Item, Value_Fore, Sigma_Fore, Aft, Exp);
Ada.Text_IO.New_Line;
end Put_Line;
procedure Put(Item: Number;
Value_Fore: Natural := 7;
Sigma_Fore: Natural := 3;
Aft: Natural := 2;
Exp: Natural := 0) is
begin
RIO.Put(Item.Value, Value_Fore, Aft, Exp);
Ada.Text_IO.Put(" (+-");
RIO.Put(Item.Sigma, Sigma_Fore, Aft, Exp);
Ada.Text_IO.Put(")");
end Put;
end Approximation;

View file

@ -1,17 +0,0 @@
with Approximation, Ada.Numerics.Elementary_Functions;
procedure Test_Approximations is
package A is new Approximation(Float,
Ada.Numerics.Elementary_Functions.Sqrt,
Ada.Numerics.Elementary_Functions."**");
use type A.Number;
X1: A.Number := A.Approx(100.0, 1.1);
Y1: A.Number := A.Approx( 50.0, 1.2);
X2: A.Number := A.Approx(200.0, 2.2);
Y2: A.Number := A.Approx(100.0, 2.3);
begin
A.Put_Line("Distance:",
((X1-X2)**2 + (Y1 - Y2)**2)**0.5,
Sigma_Fore => 1);
end Test_Approximations;

View file

@ -1,59 +1,51 @@
(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">enum</span> <span style="color: #000000;">VALUE</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">DELTA</span>
with javascript_semantics
enum VALUE, DELTA
<span style="color: #008080;">type</span> <span style="color: #000000;">imprecise</span><span style="color: #0000FF;">(</span><span style="color: #004080;">object</span> <span style="color: #000000;">imp</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #004080;">sequence</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imp</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">and</span> <span style="color: #004080;">atom</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imp</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">and</span> <span style="color: #004080;">atom</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imp</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">])</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
type imprecise(object imp)
return sequence(imp) and atom(imp[VALUE]) and atom(imp[DELTA])
end type
<span style="color: #008080;">function</span> <span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">*</span><span style="color: #000000;">a</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function sqr(atom a)
return a*a
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">imprecise_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imprecise</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">delta</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">])</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">]))</span>
<span style="color: #000000;">imprecise</span> <span style="color: #000000;">ret</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">],</span> <span style="color: #000000;">delta</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">ret</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function imprecise_add(imprecise a, b)
atom delta = sqrt(sqr(a[DELTA]) + sqr(b[DELTA]))
imprecise ret = {a[VALUE] + b[VALUE], delta}
return ret
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">imprecise_mul</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imprecise</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">delta</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">])</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">]))</span>
<span style="color: #000000;">imprecise</span> <span style="color: #000000;">ret</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">],</span><span style="color: #000000;">delta</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">ret</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function imprecise_mul(imprecise a, b)
atom delta = sqrt(sqr(a[VALUE]*b[DELTA]) + sqr(b[VALUE]*a[DELTA]))
imprecise ret = {a[VALUE] * b[VALUE],delta}
return ret
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">imprecise_div</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imprecise</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">delta</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">])</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">]))/</span><span style="color: #000000;">sqr</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">])</span>
<span style="color: #000000;">imprecise</span> <span style="color: #000000;">ret</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">/</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">],</span> <span style="color: #000000;">delta</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">ret</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function imprecise_div(imprecise a, b)
atom delta = sqrt(sqr(a[VALUE]*b[DELTA]) + sqr(b[VALUE]*a[DELTA]))/sqr(b[VALUE])
imprecise ret = {a[VALUE] / b[VALUE], delta}
return ret
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">imprecise_pow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imprecise</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">v</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">],</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">delta</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #000000;">v</span><span style="color: #0000FF;">*</span><span style="color: #000000;">c</span><span style="color: #0000FF;">*</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">DELTA</span><span style="color: #0000FF;">]/</span><span style="color: #000000;">a</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">])</span>
<span style="color: #000000;">imprecise</span> <span style="color: #000000;">ret</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">v</span><span style="color: #0000FF;">,</span><span style="color: #000000;">delta</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">ret</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function imprecise_pow(imprecise a, atom c)
atom v = power(a[VALUE], c),
delta = abs(v*c*a[DELTA]/a[VALUE])
imprecise ret = {v,delta}
return ret
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">printImprecise</span><span style="color: #0000FF;">(</span><span style="color: #000000;">imprecise</span> <span style="color: #000000;">imp</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%g+/-%g"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">imp</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function imprecise_str(imprecise imp)
return sprintf("%g+/-%g",imp)
end function
<span style="color: #000000;">imprecise</span> <span style="color: #000000;">x1</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">100</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1.1</span><span style="color: #0000FF;">},</span>
<span style="color: #000000;">y1</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">50</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1.2</span><span style="color: #0000FF;">},</span>
<span style="color: #000000;">x2</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{-</span><span style="color: #000000;">200</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2.2</span><span style="color: #0000FF;">},</span>
<span style="color: #000000;">y2</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{-</span><span style="color: #000000;">100</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2.3</span><span style="color: #0000FF;">},</span>
<span style="color: #000000;">tmp1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">tmp2</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">d</span>
<span style="color: #000000;">tmp1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">imprecise_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x2</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">tmp1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">imprecise_pow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tmp1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">tmp2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">imprecise_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">y1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">y2</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">tmp2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">imprecise_pow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tmp2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">imprecise_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tmp1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tmp2</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">imprecise_pow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.5</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Distance, d, between the following points :"</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n( x1, y1) = ( %s, %s)"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">printImprecise</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">),</span><span style="color: #000000;">printImprecise</span><span style="color: #0000FF;">(</span><span style="color: #000000;">y1</span><span style="color: #0000FF;">)})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n( x2, y2) = ( %s, %s)"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">printImprecise</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">),</span><span style="color: #000000;">printImprecise</span><span style="color: #0000FF;">(</span><span style="color: #000000;">y2</span><span style="color: #0000FF;">)})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nis d = %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">printImprecise</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)})</span>
<!--
imprecise x1 = {100, 1.1},
y1 = {50, 1.2},
x2 = {-200, 2.2},
y2 = {-100, 2.3},
tmp1 = imprecise_pow(imprecise_add(x1, x2), 2),
tmp2 = imprecise_pow(imprecise_add(y1, y2), 2),
d = imprecise_pow(imprecise_add(tmp1,tmp2), 0.5)
printf(1,"Distance, d, between the following points :\n")
printf(1," (x1, y1) = (%s, %s)\n",{imprecise_str(x1),imprecise_str(y1)})
printf(1," (x2, y2) = (%s, %s)\n",{imprecise_str(x2),imprecise_str(y2)})
printf(1," is d = %s\n", {imprecise_str(d)})