advertisement
Premier Club Log In/Registration
  Include Code  Search Tips
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   SKILLBUILDING  |   TIP BANK  |   SOURCEBANK  |   FORUMS  |   NEWSLETTERS
Browse DevX
Partners & Affiliates
advertisement
advertisement
Tip of the Day
Average Rating: 1/5 | Rate this item | 1 user has rated this item.
Tip formerly from VB2TheMax
Expertise: beginner
Language: VB4,VB5,VB6,VBS
May 27, 2000
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
If you have a hot tip and we publish it, we'll pay you. However, due to accounting overhead we no longer pay $10 for a single tip submission. You must accumulate 10 acceptable tips to receive payment. Be sure to include a clear explanation of what the technique does and why it's useful. If it includes code, limit it to 20 lines if possible. Submit your tip here.
Please rate this item (5=best)
 1  2  3  4  5
advertisement
advertisement
Advertising Info  |   Member Services  |   Permissions  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About