468,738 Members | 1,722 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Share your developer knowledge by writing an article on Bytes.

Factorial and Gamma Functions for VB

kadghar
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.

Kad
Jun 13 '07 #1
0 11075

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

13 posts views Thread by km | last post: by
2 posts views Thread by Scott | 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
1 post views Thread by CARIGAR | last post: by
xarzu
2 posts views Thread by xarzu | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.