casacore
Loading...
Searching...
No Matches
Combinatorics.h
Go to the documentation of this file.
1//# Smooth.h: smooth vectors and arrays
2//# Copyright (C) 2010 by ESO (in the framework of the ALMA collaboration)
3//# Copyright (C) 1996,1997,1998,1999,2000,2001
4//# Associated Universities, Inc. Washington DC, USA.
5//#
6//# This library is free software; you can redistribute it and/or modify it
7//# under the terms of the GNU Library General Public License as published by
8//# the Free Software Foundation; either version 2 of the License, or (at your
9//# option) any later version.
10//#
11//# This library is distributed in the hope that it will be useful, but WITHOUT
12//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14//# License for more details.
15//#
16//# You should have received a copy of the GNU Library General Public License
17//# along with this library; if not, write to the Free Software Foundation,
18//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
19//#
20//# Correspondence concerning AIPS++ should be addressed as follows:
21//# Internet email: aips2-request@nrao.edu.
22//# Postal address: AIPS++ Project Office
23//# National Radio Astronomy Observatory
24//# 520 Edgemont Road
25//# Charlottesville, VA 22903-2475 USA
26//#
27//# $Id$
28
29#ifndef SCIMATH_COMBINATORICS_H
30#define SCIMATH_COMBINATORICS_H
31
32
33//# Includes
34#include <casacore/casa/aips.h>
35#include <casacore/casa/Arrays/Vector.h>
36
37#include <mutex>
38
39namespace casacore { //# NAMESPACE CASACORE - BEGIN
40
41// <summary>
42// Combinatorics related functions.
43// </summary>
44
45// <use visibility=export>
46
47//# <author>Dave Mehringer</author>
48// <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
49// </reviewed>
50
51// <prerequisite>
52// <li> <linkto class="Vector">Vector</linkto>
53// <li> <linkto class="Array">Array</linkto>
54// </prerequisite>
55
56// <etymology>
57// self-explanatory
58// </etymology>
59
60// <synopsis>
61// Various factorial and combinatorical functions.
62// </synopsis>
63
64// <motivation>
65// Binomial coefficients needed for Images/ImageProfileFitter
66// </motivation>
67
69
70 public:
71
72 // Get n!
73 static uInt factorial(const uInt n)
74 {
75 fillCache(n);
76 return _factorialCache[n];
77 }
78
79 // "n choose k" = n!/(k!(n-k)!)
80 // Exception is thrown if k > n.
81 static uInt choose(const uInt n, const uInt k);
82
83 private:
84 static void fillCache(const uInt n);
85
87 static volatile uInt _factorialCacheSize; //# volatile for double checked lock
88 static std::mutex theirMutex;
89};
90} //# NAMESPACE CASACORE - END
91
92#endif
93
static uInt factorial(const uInt n)
Get n!
static uInt choose(const uInt n, const uInt k)
"n choose k" = n!/(k!(n-k)!) Exception is thrown if k > n.
static Vector< uInt > _factorialCache
static void fillCache(const uInt n)
static volatile uInt _factorialCacheSize
static std::mutex theirMutex
this file contains all the compiler specific defines
Definition mainpage.dox:28
unsigned int uInt
Definition aipstype.h:51