Last modified: Fri Feb 11 14:23:42 2005.
NAME:
.EqualTo.
PURPOSE:
Relational operator to test the equality of floating point numbers.
CATEGORY:
Utility
LANGUAGE:
Fortran-95
CALLING SEQUENCE:
IF ( x .EqualTo. y ) THEN
.....
END IF
OPERANDS:
x, y: Two congruent floating point data objects to compare.
UNITS: N/A
TYPE: REAL( Single ) [ == default real]
OR
REAL( Double )
DIMENSION: Scalar, or any allowed rank array.
OPERATOR RESULT:
(x .EqualTo. y) The result is a logical value indicating whether
the operands are equal to within numerical precision
UNITS: N/A
TYPE: LOGICAL
DIMENSION: Same as operands.
PROCEDURE:
The test performed is
ABS( x - y ) < SPACING( MAX(ABS(x),ABS(y)) )
If the result is .TRUE., the numbers are considered equal.
CREATION HISTORY:
Written by: Paul van Delst, CIMSS/SSEC 30-Aug-2003
paul.vandelst@ssec.wisc.edu
(See Compare_Float_Numbers.f90)
NAME:
.GreaterThan.
PURPOSE:
Relational operator to test if one operand is greater than another.
CATEGORY:
Utility
LANGUAGE:
Fortran-95
CALLING SEQUENCE:
IF ( x .GreaterThan. y ) THEN
.....
END IF
OPERANDS:
x, y: Two congruent floating point data objects to compare.
UNITS: N/A
TYPE: REAL( Single ) [ == default real]
OR
REAL( Double )
DIMENSION: Scalar, or any allowed rank array.
OPERATOR RESULT:
(x .GreaterThan. y) The result is a logical value indicating whether
the operand x is greater than y by more than
the spacing between representable floating point
numbers.
UNITS: N/A
TYPE: LOGICAL
DIMENSION: Same as operands.
PROCEDURE:
The test performed is
( x - y ) >= SPACING( MAX(ABS(x),ABS(y)) )
If the result is .TRUE., x is considered greater than y.
CREATION HISTORY:
Written by: Paul van Delst, CIMSS/SSEC 30-Aug-2003
paul.vandelst@ssec.wisc.edu
(See Compare_Float_Numbers.f90)
NAME:
.LessThan.
PURPOSE:
Relational operator to test if one operand is less than another.
CATEGORY:
Utility
LANGUAGE:
Fortran-95
CALLING SEQUENCE:
IF ( x .LessThan. y ) THEN
.....
END IF
OPERANDS:
x, y: Two congruent floating point data objects to compare.
UNITS: N/A
TYPE: REAL( Single ) [ == default real]
OR
REAL( Double )
DIMENSION: Scalar, or any allowed rank array.
OPERATOR RESULT:
(x .LessThan. y) The result is a logical value indicating whether
the operand x is less than y by more than the
spacing between representable floating point
numbers.
UNITS: N/A
TYPE: LOGICAL
DIMENSION: Same as operands.
PROCEDURE:
The test performed is
( y - x ) >= SPACING( MAX(ABS(x),ABS(y)) )
If the result is .TRUE., x is considered less than y.
CREATION HISTORY:
Written by: Paul van Delst, CIMSS/SSEC 30-Aug-2003
paul.vandelst@ssec.wisc.edu
(See Compare_Float_Numbers.f90)
NAME:
Compare_Float
PURPOSE:
Function to compare floating point scalars and arrays with adjustible
precision tolerance.
CATEGORY:
Utility
LANGUAGE:
Fortran-95
CALLING SEQUENCE:
Result = Compare_Float( x, y, & ! Input
ULP = ULP ) ! Optional input
INPUT ARGUMENTS:
x, y: Two congruent floating point data objects to compare.
UNITS: N/A
TYPE: REAL( Single ) [ == default real]
OR
REAL( Double )
DIMENSION: Scalar, or any allowed rank array.
ATTRIBUTES: INTENT( IN )
OPTIONAL INPUT ARGUMENTS:
ULP: Unit of data precision. The acronym stands for "unit in
the last place," the smallest possible increment or decrement
that can be made using a machine's floating point arithmetic.
A 0.5 ulp maximum error is the best you could hope for, since
this corresponds to always rounding to the nearest representable
floating-point number. Value must be positive - if a negative
value is supplied, the absolute value is used.
If not specified, the default value is 1.
UNITS: N/A
TYPE: INTEGER
DIMENSION: Scalar
ATTRIBUTES: OPTIONAL, INTENT( IN )
OUTPUT ARGUMENTS:
None.
OPTIONAL OUTPUT ARGUMENTS:
None.
FUNCTION RESULT:
Result: The return value is a logical value indicating whether
the inputs are equal (to within the required precision)
.TRUE. - if the floating point numbers are equal to
within the specified tolerance.
.FALSE. - if the floating point numbers are different.
UNITS: N/A
TYPE: LOGICAL
DIMENSION: Scalar
CALLS:
None.
SIDE EFFECTS:
None.
RESTRICTIONS:
None.
PROCEDURE:
The test performed is
ABS( x - y ) < ( ULP * SPACING( MAX(ABS(x),ABS(y)) ) )
If the result is .TRUE., the numbers are considered equal.
The intrinsic function SPACING(x) returns the absolute spacing of numbers
near the value of x,
{ EXPONENT(x)-DIGITS(x)
{ 2.0 for x /= 0
SPACING(x) = {
{
{ TINY(x) for x == 0
The ULP optional argument scales the comparison.
James Van Buskirk and James Giles suggested this method for floating
point comparisons in the comp.lang.fortran newsgroup.
CREATION HISTORY:
Written by: Paul van Delst, CIMSS/SSEC 01-Apr-2003
paul.vandelst@ssec.wisc.edu
(See Compare_Float_Numbers.f90)