TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
 Specialized Dev Zones Research Center eBook Library .NET Java C++ Web Dev Architecture Database Security Open Source Enterprise Mobile Special Reports 10-Minute Solutions DevXtra Blogs Slideshow

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.

 Home » Tip Bank » .NET » VB.NET » Math Processing
Language: VB4,VB5,VB6,VBS
Expertise: beginner
May 27, 2000

### WEBINAR:On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning

# Factorial - The factorial of a number

``````' The factorial of a number
'
' if NUMBER is negative or >170 it raises an
' "subscript out of range" error

Function Factorial(ByVal number As Long) As Double
Static result(170) As Double

' this routine is very fast because it
' caches all the possible results
If result(0) = 0 Then
' this is the first time it is executed
Dim i As Long
result(0) = 1
' Factorial(170) is the highest factorial
' value that can be stored in a Double
For i = 1 To 170
result(i) = result(i - 1) * i
Next
End If

' just read the result from the cached array
Factorial = result(number)

End Function

' *** UPDATE ***
' Rick Rothstein (MVP-VB) sent us the following update for the Factorial
' function. It reports whole number results up to an argument value of 27 (a 29-
' digit answer containing 23 significant digits) before switching to power-of-
' ten notation.

' The factorial of a number
'
' if NUMBER is negative or >170 it raises an
' "subscript out of range" error
Function Factorial(ByVal N As Integer) As Variant
Static Result(170) As Variant
Dim X As Integer
' this routine is very fast because it
' caches all the possible results
If Result(0) = 0 Then
' convert to Decimal data type
Result(0) = CDec(1)
' Factorial(170) is the highest factorial
' value that can be stored in a Double
For X = 1 To 170
' for X<28, calculate using Decimal data
' type; use Double data type afterwards
If X = 28 Then
Result(28) = 28 * CDbl(Result(27))
Else
Result(X) = X * Result(X - 1)
End If
Next
End If
' just read the result from the cached array
Factorial = Result(N)
End Function
``````
Francesco Balena

 Submit a Tip Browse ".NET" Tips Browse All Tips
Comment and Contribute

(Maximum characters: 1200). You have 1200 characters left.

Thanks for your registration, follow us on our social networks to keep up-to-date