Drexel dragonThe Math ForumDonate to the Math Forum

Ask Dr. Math - Questions and Answers from our Archives
_____________________________________________
Associated Topics || Dr. Math Home || Search Dr. Math
_____________________________________________

Fraction Algorithm


Date: 03/19/2002 at 08:20:50
From: Gil Barak
Subject: Fraction Algorithm

I read one of the posts about how to find finite decimals such as 
.078349 and convert them into fractions. I have been having trouble 
making an application that can convert the decimal into a fraction 
without doing 78349/1000000.

Could you please give me the algorithm for this operation, in either 
Pascal or Visual Basic? 

Thanks, 
Gil


Date: 03/19/2002 at 12:08:50
From: Doctor Peterson
Subject: Re: Fraction Algorithm

Hi, Gil.

I presume this is the page you read:

   Decimal To Fraction Conversion
   http://mathforum.org/dr.math/problems/lawson6.25.98.html   

You may be able to program more easily from the explanation in our FAQ 
on fractions (see section C, Fractions with Small Denominators):

   http://mathforum.org/dr.math/faq/faq.fractions.html#decfrac   

Here is a Visual Basic program that implements the algorithm on that 
page:

Private Sub ConvertToFraction(ByVal V As Double, N As Long, D As Long)

    Const MaxTerms = 15         'Limit to prevent infinite loop
    Const MinDivisor = 0.000001 'Limit to prevent divide by zero
    Const MaxError = 0.00000001 'How close is enough
    Dim F As Double             'Fraction being converted
    Dim A As Long               'Current term in continued fraction
    Dim N1 As Long              'Numerator, denominator of last approx
    Dim D1 As Long
    Dim N2 As Long          'Numerator, denominator of previous approx
    Dim D2 As Long
    
    F = V                       'Initialize fraction being converted
    
    N1 = 1                      'Initialize fractions with 1/0, 0/1
    D1 = 0
    N2 = 0
    D2 = 1

    For i = 0 To MaxTerms
        A = Int(F)              'Get next term
        F = F - A               'Get new divisor
        N = N1 * A + N2         'Calculate new fraction
        D = D1 * A + D2
        N2 = N1                 'Save last two fractions
        D2 = D1
        N1 = N
        D1 = D
                                'Quit if dividing by zero
        If F < MinDivisor Then Exit For

        'The following line shows the data for the table found in
        'http://mathforum.org/dr.math/faq/faq.fractions.html   
        'and should be removed for actual use
        MsgBox "n:" & i & vbCrLf & "Quotient:" & F + A & vbCrLf & _
               "a(n):" & A & vbCrLf & "Fraction:" & F & vbCrLf & _
               "Reciprocal:" & 1 / F & vbCrLf & _
               "Value:" & N & "/" & D & "=" & N / D

                                'Quit if close enough
        If Abs(V - N / D) < MaxError Then Exit For
        F = 1 / F               'Take reciprocal
    Next i

End Sub

- Doctor Peterson The Math Forum
  http://mathforum.org/dr.math/   


Date: 03/20/2002 at 16:24:02
From: Gil Barak
Subject: Fraction Algorithm

Thanks, this will help me a lot.
    
Associated Topics:
College Algorithms
College Number Theory
High School Calculators, Computers
High School Number Theory
High School Sequences, Series

Search the Dr. Math Library:


Find items containing (put spaces between keywords):
 
Click only once for faster results:

[ Choose "whole words" when searching for a word like age.]

all keywords, in any order at least one, that exact phrase
parts of words whole words

Submit your own question to Dr. Math

[Privacy Policy] [Terms of Use]

_____________________________________
Math Forum Home || Math Library || Quick Reference || Math Forum Search
_____________________________________

Ask Dr. MathTM
© 1994-2013 The Math Forum
http://mathforum.org/dr.math/