Code-Eli  0.3.6
factorial.hpp
Go to the documentation of this file.
1 /*********************************************************************************
2 * Copyright (c) 2013 David D. Marshall <ddmarsha@calpoly.edu>
3 *
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * David D. Marshall - initial code and implementation
11 ********************************************************************************/
12 
13 #ifndef eli_mutil_dm_factorial_hpp
14 #define eli_mutil_dm_factorial_hpp
15 
16 #include "eli/code_eli.hpp"
17 
18 namespace eli
19 {
20  namespace mutil
21  {
22  namespace dm
23  {
24  template<typename data__, typename natural__>
25  void factorial(data__ &val, natural__ n)
26  {
27  val=static_cast<data__>(1);
28  if (n<=1)
29  {
30  return;
31  }
32 
33  switch(n)
34  {
35  default:
36  {
37  natural__ i;
38  for (i=n; i>10; --i)
39  {
40  val*=static_cast<data__>(i);
41  }
42 
43  data__ val2;
44 
45  factorial(val2, 10);
46  val*=val2;
47 
48  break;
49  }
50  case(10):
51  {
52  val=static_cast<data__>(3628800);
53  break;
54  }
55  case(9):
56  {
57  val=static_cast<data__>(362880);
58  break;
59  }
60  case(8):
61  {
62  val=static_cast<data__>(40320);
63  break;
64  }
65  case(7):
66  {
67  val=static_cast<data__>(5040);
68  break;
69  }
70  case(6):
71  {
72  val=static_cast<data__>(720);
73  break;
74  }
75  case(5):
76  {
77  val=static_cast<data__>(120);
78  break;
79  }
80  case(4):
81  {
82  val=static_cast<data__>(24);
83  break;
84  }
85  case(3):
86  {
87  val=static_cast<data__>(6);
88  break;
89  }
90  case(2):
91  {
92  val=static_cast<data__>(2);
93  break;
94  }
95  }
96  }
97  }
98  }
99 }
100 
101 #endif
102 
Definition: math.hpp:20
void factorial(data__ &val, natural__ n)
Definition: factorial.hpp:25