View Raw SPL
/*****************************************************************************
*                                                                            *
*   FINITE.SPL  Copyright (C) 2002 DSP Development Corporation               *
*                               All Rights Reserved                          *
*                                                                            *
*   Author:      Randy Race                                                  *
*                                                                            *
*   Synopsis:    Returns 1 for each element that is not inf                  *
*                                                                            *
*   Revisions:    9 Aug 2002  RRR  Creation                                  *
*                                                                            *
*****************************************************************************/

#include 


#if @HELP_FINITE

    FINITE

    Purpose: Returns 1 for each element that is not infinite (inf) or NA

    Syntax:  FINITE(ser)

              ser - Series

    Returns: A series where each element is 1 where the input series is
             not INF or NA and 0 where the input series is INF or NA.

    Example:
             a = {1, 2, inf, nan};
             b = 5;
             c = {};

             finite(a) returns {1, 1, 0, 0}
             finite(b) returns {1}
             finite(c) returns {}

    Remarks:
             FINITE always returns a series.

             FINITE returns an empty series if the input is an empty series.

    See Also:
             Finite
             Isempty
             Isinf
             Isnan
#endif


/* where is input not inf or NA? */
finite(a)
{
        if (argc < 1) error("finite - input required");

        if (length(a) == 0)
        {
                return(finite_empty());
        }

        return(not(isinf(a) || isnan(a)));
}


finite_empty()
{
        if (getconf("spl_logical_op") == "1")
        {
                return(logical({}));
        }
        else
        {
                return({});
        }
}