468,738 Members | 1,722 Online

# Factorial and Gamma Functions for VB 1,295 Expert 1GB
Hi, I saw that Killer posted a simple Factorial Function that allows you to calculate up to 13!, well, you can use this for bigger numbers by changing the variable type.

Why is this?

You can use factorial on integers (that should be the input), the output could be a string or a double, anyway you will alwas have the factorial. The only restriction is in the input.

Yes, i mean this function works fine for values up to 170! or something like that:

Expand|Select|Wrap|Line Numbers
1. Public Function Factorial(ByVal bNum As Integer) As Double
2.   Dim I As Double
3.   If bNum <= 0 Then Exit Function
4.   Factorial = 1
5.   For I = 1 To bNum
6.     Factorial = Factorial * I
7.   Next
8. End Function
Also VB can be used for making a little bit more complex functions like a Gamma.

What is a Gamma?

A Gamma Function is the generalization of the Factorial Function (this means you can use any positive number in it). If you use a Gamma for an integer, it'll give you the Factorial of the previus integer. i.e.:

G(5) = 4 ! = 24

The advantage is that even if you cannot have 4.25 ! , you can always have
G(5.25) = 35.2088612458766

Cool!!!

To obtain it, you can use many numerical methods. Here I used an old friend by Euler-Mascheroni.

Expand|Select|Wrap|Line Numbers
1. Public Function Gamma(ByVal Dou1 As Double) As Double
2.     Dim I As Integer
3.     Dim Dou2 As Double
4.     Dim Dou3 As Double
5.
6.     If Fix(Dou1) = Dou1 Then
7.         If Dou1 = 0 Or Dou1 = 1 Then
8.             Gamma = 1
9.             Exit Function
10.         Else
11.             Dou2 = 1
12.             For I = 1 To Dou1 - 1
13.                 Dou2 = Dou2 * I
14.             Next
15.             Gamma = Dou2
16.             Exit Function
17.         End If
18.     ElseIf Dou1 > 3 Then
19.         Dou2 = 1
20.         For I = 1 To (Fix(Dou1) - 1)
21.             Dou2 = Dou2 * (Dou1 - 1)
22.             Dou1 = Dou1 - 1
23.         Next
24.         Dou3 = Exp(-0.57721566 * Dou1) / Dou1
25.         For I = 1 To 9999
26.             Dou3 = Dou3 * ((1 + (Dou1 / I)) ^ (-1)) * Exp(Dou1 / I)
27.         Next
28.         Dou3 = Dou2 * Dou3
29.         Gamma = Dou3
30.     Else
31.         Dou3 = Exp(-0.577215664901533 * Dou1) / Dou1
32.         For I = 1 To 9999
33.             Dou3 = Dou3 * ((1 + (Dou1 / I)) ^ (-1)) * Exp(Dou1 / I)
34.         Next
35.         Gamma = Dou3
36.     End If
37. End Function
I hope this could be of some use next time you're dealing with someones homework.

0 11075 13 posts views Thread by km | last post: by 2 posts views Thread by Scott | last post: by 13 posts views Thread by Eduardo78 | last post: by 33 posts views Thread by patrick_woflian | last post: by 35 posts views Thread by aNt17017 | last post: by 58 posts views Thread by mailursubbu | last post: by 8 posts views Thread by salman | last post: by 59 posts views Thread by Umesh | last post: by 3 posts views Thread by Sugandh Jain | last post: by reply views Thread by PrototypeChain | last post: by reply views Thread by dreamtext | last post: by 1 post views Thread by CARIGAR | last post: by 3 posts views Thread by anoble1 | last post: by 4 posts views Thread by HopkinsUni | last post: by 2 posts views Thread by xarzu | last post: by 1 post views Thread by UniDue | last post: by reply views Thread by amitsingh07s | last post: by reply views Thread by Randomdude12 | last post: by