function pdf = arcsin_pdf ( x, a )

%*****************************************************************************80
%
%% arcsin_pdf() evaluates the Arcsin PDF.
%
%  Discussion:
%
%    The LOGISTIC EQUATION has the form:
%
%      X(N+1) = 4.0 * LAMBDA * ( 1.0 - X(N) ).
%
%    where 0 < LAMBDA <= 1.  This nonlinear difference equation maps
%    the unit interval into itself, and is a simple example of a system
%    exhibiting chaotic behavior.  Ulam and von Neumann studied the
%    logistic equation with LAMBDA = 1, and showed that iterates of the
%    function generated a sequence of pseudorandom numbers with
%    the Arcsin probability density function.
%
%    The derived sequence
%
%      Y(N) = ( 2 / PI ) * Arcsin ( SQRT ( X(N) ) )
%
%    is a pseudorandom sequence with the uniform probability density
%    function on [0,1].  For certain starting values, such as X(0) = 0, 0.75,
%    or 1.0, the sequence degenerates into a constant sequence, and for
%    values very near these, the sequence takes a while before becoming
%    chaotic.
%
%    PDF(X) = 1 / ( PI * Sqrt ( A^2 - X^2 ) )
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    01 September 2004
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Daniel Zwillinger and Stephen Kokoska,
%    CRC Standard Probability and Statistics Tables and Formulae,
%    Chapman and Hall/CRC, 2000, pages 114-115.
%
%  Input:
%
%    real X, the argument of the PDF.
%    -A < X < A.
%
%    real A, the parameter of the CDF.
%    A must be positive.
%
%  Output:
%
%    real PDF, the value of the PDF.
%
  if ( a <= 0.0 )
    fprintf ( 1, '\n' );
    fprintf ( 1, 'ARCSIN_PDF - Fatal error!\n' );
    fprintf ( 1, '  Parameter A must be positive.\n' );
    error ( 'ARCSIN_PDF - Fatal error!' );
  end

  if ( x <= -a | a <= x )
    pdf = 0.0;
  else
    pdf = 1.0 / ( pi * sqrt ( a * a - x * x ) );
  end

  return
end
