Edward S Zuris
edzedz at comcast.net
Thu May 15 09:20:27 CDT 2008
I haven't thought of a Fibonacci sequence in a long time. -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Gustav Brock Sent: Thursday, May 15, 2008 6:05 AM To: accessd at databaseadvisors.com Subject: Re: [AccessD] Decimal Data Type Hi Tony (iggy?) As for the difference, look up the on-line help for range etc. Why it was added I don't know, but I guess it was to have a data type compatible with Decimal of SQL Server. I haven't used it myself in a table. William, I think, posted some years ago some nasty examples on errors which the use of the data type could cause. In VBA it can be necessary for avoiding bit errors when handling very large numbers. I use it in our rounding function posted several times. Here is another example: Create the Fibonacci sequence of numbers. If Long was used only 46 elements could be calculated: <code> Public Function FibonacciSequenceDec( _ ByVal lngElements As Long) _ As Variant ' Build and return array with Fibonacci sequence of numbers. ' Count of elements is determined by lngElements. ' Max. number returned in array: ' 50095301248058391139327916261 ' ' 2004-10-03. Gustav Brock, Cactus Data, CPH. ' Min. index of sequence per definition. Const clngIndexMin As Long = 0 ' Max. possible index of sequence for datatype Decimal. Const clngIndexMax As Long = 139 Dim adecSeq() As Variant Dim lngIndex As Long If lngElements < clngIndexMin Or lngElements > clngIndexMax Then ' Not a valid input. Else ' Build and fill array with the Fibonacci sequence of numbers. ReDim adecSeq(clngIndexMin To lngElements) For lngIndex = clngIndexMin To lngElements If lngIndex < 2 Then ' Values of the first two elements are 0 and 1 per definition. adecSeq(lngIndex) = CDec(lngIndex) Else ' Value is the sum of the two preceding numbers. adecSeq(lngIndex) = CDec(adecSeq(lngIndex - 2)) + CDec(adecSeq(lngIndex - 1)) End If '' Debug.Print adecSeq(lngIndex); Next End If FibonacciSequenceDec = adecSeq() End Function Public Function FibonacciElementDec( _ ByVal lngElements As Long) _ As Variant ' Returns the value of element lngElements in the ' Fibonacci sequence of numbers. ' Max. number returned: ' 50095301248058391139327916261 ' ' 2004-10-03. Gustav Brock, Cactus Data, CPH. Const clngIndexMin As Long = 0 Const clngIndexMax As Long = 139 Dim decValue As Variant If lngElements < clngIndexMin Or lngElements > clngIndexMax Then ' Not a valid input. Return error. decValue = CDec(-1) Else ' Return last number in sequence in array. decValue = FibonacciSequenceDec(lngElements)(lngElements) End If FibonacciElementDec = decValue End Function </code> /gustav >>> iggy at nanaimo.ark.com 15-05-2008 14:37 >>> Hey Gustav How does Decimal differ from Double or Currency and do you know why it was added as a data type? As Edward has confirmed when Access does the conversion "you have to hunt through the app and fix things by hand". That said, Decimal should be avoided as data type in tables as it is known to be buggy. In VBA, however, it can be quite useful. Just out of curiosity (because I don't know what it is supposed to be used for) where would you use it in VBA? Thanks -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com