20 lines
923 B
Plaintext
20 lines
923 B
Plaintext
BEGIN # test REAL values for approximate equality #
|
|
# returns TRUE if value is approximately equal to other, FALSE otherwide #
|
|
PROC approx equals = ( REAL value, REAL other, REAL epsilon )BOOL: ABS ( value - other ) < epsilon;
|
|
# shows the result of testing a for approximate equality with b #
|
|
PROC test = ( REAL a, b )VOID:
|
|
BEGIN
|
|
REAL epsilon = 1e-18;
|
|
print( ( a, ", ", b, " => ", IF approx equals( a, b, epsilon ) THEN "true" ELSE "false" FI, newline ) )
|
|
END # test # ;
|
|
# task test cases #
|
|
test( 100000000000000.01, 100000000000000.011 );
|
|
test( 100.01, 100.011 );
|
|
test( 10000000000000.001 / 10000.0, 1000000000.0000001000);
|
|
test( 0.001, 0.0010000001 );
|
|
test( 0.000000000000000000000101, 0.0 );
|
|
test( sqrt( 2 ) * sqrt( 2 ), 2.0 );
|
|
test( - sqrt( 2 ) * sqrt( 2 ), -2.0 );
|
|
test( 3.14159265358979323846, 3.14159265358979324 )
|
|
END
|