| lstcld |
|
Table of contents
Procedure
LSTCLD ( Last closest double precision array element )
INTEGER FUNCTION LSTCLD ( X, N, ARRAY )
Abstract
Find the index of the array element closest to a given number X
in an array of non-decreasing numbers.
Required_Reading
None.
Keywords
ARRAY
SEARCH
Declarations
IMPLICIT NONE
DOUBLE PRECISION X
INTEGER N
DOUBLE PRECISION ARRAY ( * )
Brief_I/O
VARIABLE I/O DESCRIPTION
-------- --- --------------------------------------------------
X I Search value.
N I Number of elements in ARRAY.
ARRAY I Array to be searched.
The function returns the index of the element of ARRAY
whose value is closest to X.
Detailed_Input
X is the value to be compared with the elements of ARRAY.
N is the number of elements in ARRAY.
ARRAY is an array of double precision numbers such that
ARRAY( I ) <= ARRAY( J )
for all I < J.
Detailed_Output
LSTCLD is the index of the element of the non-decreasing
sequence: {ARRAY(I) : 1 <= I <= N} that is closest
to X. In other words, ARRAY( LSTCLD( X, N, ARRAY ) )
is the element of ARRAY whose value is closest to X.
If X falls precisely on the midpoint of consecutive array
elements, the index of the larger of the two values is
returned.
If X is closest to a value which appears more than
once in the array (since the array is ordered, these
elements would have to be consecutive), the highest index
for that value will be returned.
LSTCLD = I for some I in the range 1 to N, unless N is
less than or equal to zero, in which case LSTCLD is zero.
Parameters
None.
Exceptions
Error free.
1) If the value of N is non-positive, LSTCLD returns the value
zero.
Files
None.
Particulars
LSTCLD uses a binary search algorithm to locate the value closest
to X in the non-decreasing sequence of double precision numbers
represented by the elements of ARRAY.
Examples
Suppose ARRAY contains the following double precision elements:
ARRAY: -1 0 1 1.5 1.5 2 3 9 9.5 100
index: 1 2 3 4 5 6 7 8 9 10
The following table shows the values of LSTCLD that would be
returned for various values of X, and the corresponding closest
array element values.
X LSTCLD( X,10,ARRAY ) ARRAY( LSTCLD( X,10,ARRAY ))
----- -------------------- ---------------------------
0.12 2 0
-0.12 2 0
-2.0 1 -1
2.5 7 3
1.3 5 1.5
100.0 10 100
100.1 10 100
Restrictions
1) If the sequence is not non-decreasing, the routine will run
to completion but the index found will not mean anything.
Literature_References
None.
Author_and_Institution
J. Diaz del Rio (ODC Space)
W.L. Taber (JPL)
R.E. Thurman (JPL)
Version
SPICELIB Version 1.1.0, 26-OCT-2021 (JDR)
Added IMPLICIT NONE statement.
Edited the header to comply with NAIF standard.
SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)
Comment section for permuted index source lines was added
following the header.
SPICELIB Version 1.0.0, 07-SEP-1990 (RET)
|
Fri Dec 31 18:36:32 2021