procedure add(a,b)
ifreturn (numeric(a) & +numeric(b)) then return a+b|
if numeric(a) then return num(numeric(a)+b.val, b.err) |
if numeric(b) then return num(a.val+numeric(b), a.err) |
return num(a.val+b.val, (a.err^2 + b.err^2) ^ 0.5)
end
procedure sub(a,b)
ifreturn (numeric(a) & -numeric(b)) then return a-b|
if numeric(a) then return num(numeric(a)-b.val, b.err) |
if numeric(b) then return num(a.val-numeric(b), a.err) |
return num(a.val-b.val, (a.err^2 + b.err^2) ^ 0.5)
end
procedure mul(a,b)
ifreturn (numeric(a) & *numeric(b)) then return a*b|
if numeric(a) then return num(numeric(a)*b.val, abs(a*b.err)) |
if numeric(b) then return num(a.val*numeric(b), abs(b*a.err)) |
return num(f := a.val*b.val, ((f^2*((a.err/a.val)^2+(b.err/b.val)^2))^0.5))
end
procedure div(a,b)
ifreturn (numeric(a) & /numeric(b)) then return a/b|
if numeric(a) then return num(numeric(a)/b.val, abs(a*b.err)) |
if numeric(b) then return num(a.val/numeric(b), abs(b*a.err)) |
return num(f := a.val/b.val, ((f^2*((a.err/a.val)^2+(b.err/b.val)^2))^0.5))
end
procedure pow(a,b)
ifreturn (numeric(a) & ^numeric(b)) then return a^b|
if numeric(b) then return num(f := a.val^numeric(b), abs(f*b*(a.err/a.val)))
fail
end
end</lang>
The output is:
|