Approximate equality: Difference between revisions
Content added Content deleted
(Added Algol 68) |
|||
Line 92: | Line 92: | ||
-2.0000000000000000 -2.0000000000000000 FALSE |
-2.0000000000000000 -2.0000000000000000 FALSE |
||
3.1415926535897932 3.1415926535897932 TRUE |
3.1415926535897932 3.1415926535897932 TRUE |
||
</pre> |
|||
=={{header|ALGOL 68}}== |
|||
{{Trans|Kotlin}} |
|||
<lang algol68>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</lang> |
|||
{{out}} |
|||
<pre> |
|||
+1.00000000000000e +14, +1.00000000000000e +14 => true |
|||
+1.00010000000000e +2, +1.00011000000000e +2 => false |
|||
+1.00000000000000e +9, +1.00000000000000e +9 => false |
|||
+1.00000000000000e -3, +1.00000010000000e -3 => false |
|||
+1.01000000000000e -22, +0.00000000000000e +0 => true |
|||
+2.00000000000000e +0, +2.00000000000000e +0 => false |
|||
-2.00000000000000e +0, -2.00000000000000e +0 => false |
|||
+3.14159265358979e +0, +3.14159265358979e +0 => true |
|||
</pre> |
</pre> |
||