/*  
 *  - - - - - - - - - - - - - - -
 *   g a l _ f a c t o r i a l 2 
 *  - - - - - - - - - - - - - - -
 *  
 *  This routine is part of the General Astrodynamics Library  
 *
 *  Description:
 *
 *     This routine computes the factorial n!, or the value of n! / m!, or 
 *     n! * m!.
 *  
 *  Status: 
 *  
 *     Math special function.  
 *  
 *  Given:  
 *
 *     *facexp     gal_facexp_t     Pointer to factorial exponent lookup table
 *     n                i           n >= 0
 *     m                i           m >= 0
 *     s                i           When  0 result is n!
 *                                  When -1 result is n! / m!
 *                                  When +1 result is n! * m!
 *  
 *  Returned:  
 * 
 *     *f              ld           result  
 *     gal_factorial    i           status
 *                                  0 = Success
 *                                  1 = Factorial requested is beyond the range of the lookup table
 *                                  2 = Factorial requested is greater than x!
 *
 *  Notes
 *
 *  1) When s=0 the maximum factorial that can be represented by IEEE double precision
 *     real is 170!
 *
 *  References:
 *
 *     Calculation of Factorials
 *     M. L. Charnow and Jesse L. Maury, Jr.
 *     NASA TM X-55733 GSFC X-542-66-460
 *     Steptember 1966
 * 
 *  This revision:  
 * 
 *     2008 June 14 
 *  
 *  Copyright (C) 2008 Paul C. L. Willmott. See notes at end. 
 *  
 *-----------------------------------------------------------------------  
 */  

#ifndef _GAL_FACTORIAL2_H_  
#define _GAL_FACTORIAL2_H_ 1  
 
#include "gal_facexpdef.h"

#undef  __BEGIN_DECLS  
#undef  __END_DECLS  
#ifdef  __cplusplus  
#define __BEGIN_DECLS extern "C" {  
#define __END_DECLS }  
#else  
#define __BEGIN_DECLS /* empty */  
#define __END_DECLS   /* empty */  
#endif
  
__BEGIN_DECLS  

int
gal_factorial2
  (
    gal_facexp_t *facexp,
    int n,
    int m,
    int s,
    long double *f 
  ) ;
 
__END_DECLS  
  
#endif /* !_GAL_FACTORIAL2_H_ */ 

/*
 *  gal - General Astrodynamics Library  
 *  Copyright (C) 2008 Paul C. L. Willmott  
 *  
 *  This program is free software; you can redistribute it and/or modify  
 *  it under the terms of the GNU General Public License as published by  
 *  the Free Software Foundation; either version 2 of the License, or  
 *  (at your option) any later version.  
 *  
 *  This program is distributed in the hope that it will be useful,  
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of  
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
 *  GNU General Public License for more details.  
 *  
 *  You should have received a copy of the GNU General Public License along  
 *  with this program; if not, write to the Free Software Foundation, Inc.,  
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.  
 *    
 *  Contact:  
 *    
 *  Paul Willmott  
 *  vp9mu@amsat.org  
 */  
  