local fn DoublesAreApproxEqual( val1 as double, val2 as double, epsilon as double ) as CFStringRef CFStringRef result = @"false" if ( fn fabs( val1 - val2 ) < epsilon ) then result = @"true" end fn = result void local fn DoIt long i double epsilon = 1e-18, values(15) values(0) = 100000000000000.01 : values(1) = 100000000000000.011 values(2) = 100.01 : values(3) = 100.011 values(4) = 10000000000000.001 / 10000.0 : values(5) = 1000000000.0000001000 values(6) = 0.001 : values(7) = 0.0010000001 values(8) = 0.000000000000000000000101 : values(9) = 0.0 values(10) = fn sqrt(2) * fn sqrt(2) : values(11) = 2.0 values(12) = -fn sqrt(2) * fn sqrt(2) : values(13) = -2.0 values(14) = 3.14159265358979323846 : values(15) = 3.14159265358979324 for i = 0 to 14 step 2 print values(i)@", "values(i+1)@" "fn DoublesAreApproxEqual( values(i), values(i+1), epsilon ) next end fn fn DoIt HandleEvents