dcsimg
Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

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.


Tip of the Day
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
 
Comment and Contribute

 

 

 

 

 


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

 

 

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