(phixonline)-->
with javascript_semantics
procedure test(atom a,b, string dfmt="%g", cfmt="%g")
string ca = sprintf(cfmt,a),
cb = sprintf(cfmt,b),
eqs = iff(ca=cb?"":"NOT "),
da = sprintf(dfmt,a),
db = sprintf(dfmt,b)
printf(1,"%30s and\n%30s are %sapproximately equal\n",{da,db,eqs})
end procedure
test(100000000000000.01,100000000000000.011,"%.3f")
test(100.01,100.011,"%.3f")
test(10000000000000.001/10000.0,1000000000.0000001000,"%.10f")
test(0.001,0.0010000001,"%.10f") -- both
test(0.001,0.0010000001,"%.10f","%.10f") -- ways
test(0.000000000000000000000101,0.0,"%f") -- both
test(0.000000000000000000000101,0.0,"%f","%6f") -- ways
test(sqrt(2)*sqrt(2),2.0)
test(-sqrt(2)*sqrt(2),-2.0)
test(3.14159265358979323846,3.14159265358979324,"%.20f")