Search This Blog

2025/05/16

Division of decimal Algorithm-Another attempt

Here is my second attempt to right somewhat offbeat algorithm for
division of number, neither it is generic nor code perfect, yet it has
potential to create a generic & efficient code for division.
  Code is python which attempt to divide 378 by 24

Code (Python):

       ## AUTHOR:Sangram Desai ##
       ## AUTHOR EMAIL:sangram2681@gmail.com ##
       ## Purpose: Division of to decimal number ##
       ## FILE PATH : C:\Users\sangr\OneDrive\Documents\Algorithm ##
       ## Command: python3 .\divideMe.py ##

       from collections import defaultdict
       from fractions import Fraction
       import math

       decimalDivident: int = 378
       decimalDivisor: int = 24

       #tableBound
       tableLowerBound=decimalDivisor
       tableBaseLowerBound =decimalDivisor
       tableUpperBound=decimalDivident

       #divisionBound
       divisionLowerBound=0
       divisionUpperBound=decimalDivident
       intermediateResult =0
       divisionBaseLowerBound=0

       #variables for intermediate manipulation
       currentIterationNumber=1
       counter=1

       #multiplier
       multiplier =0
       swapMultiplier =0
       cumulativeMultiplier =0

       interval =0
       totalExpectedIteration=5
       isLoopBroken=False
       isExactDivision =False



       def getMultiplier(currentIterationNumber,multiplier,counter,divisionBaseLowerBound):
       if currentIterationNumber ==1:
              return   10
       elif  currentIterationNumber ==2:
              return  counter
       elif  currentIterationNumber ==3:
              return  1 + Fraction(counter, 10)
       elif  currentIterationNumber ==4:
              return  Fraction((divisionBaseLowerBound +  Fraction(counter, 10)),10)
       elif  currentIterationNumber ==5:
              return  Fraction((divisionBaseLowerBound +  Fraction(counter, 100)),10)
       else:
              return -1
       
       def getCumulativeMultiplier(currentIterationNumber,multiplier,counter,divisionBaseLowerBound):
       if currentIterationNumber ==1:
              return   10 ** counter
       elif  currentIterationNumber ==2:
              return  counter * 10
       elif  currentIterationNumber ==3:
              return  (1 +  Fraction(counter, 10))*10
       elif  currentIterationNumber ==4:
              return  divisionBaseLowerBound +   Fraction(counter, 10)
       elif  currentIterationNumber ==5:
              return  divisionBaseLowerBound +  Fraction(counter, 100)
       else:
              return -1
       
       def getIntermediateResult(currentIterationNumber,multiplier,tableLowerBound,tableBaseLowerBound,counter,decimalDivisor):
       if currentIterationNumber ==1:
              return  tableLowerBound  * multiplier
       elif  currentIterationNumber ==2:
              return   tableLowerBound  * multiplier
       elif  currentIterationNumber ==3:
              return   tableBaseLowerBound  * multiplier
       elif  currentIterationNumber ==4:
              return   tableBaseLowerBound  + Fraction( counter * decimalDivisor , 10)
       elif  currentIterationNumber ==5:
              return   tableBaseLowerBound  + Fraction( counter * decimalDivisor , 100)
       else:
              return -1
       
       print(f"------------------Starting To Find {float(decimalDivident)}/{float(decimalDivisor)}-----------------------")
       while True:
       print(f"\n>>>>>>>>>>>>>>>> Maximuim No Of Allowed Iteration Are : {float(totalExpectedIteration)} <<<<<<<<<<<<<<<<<<<")
       print(f"############# Loop Variable Status ###############################")
       print(f"\t\tIteration={float(currentIterationNumber)},counter={float(counter)}")
       print(f"\t\tdivisionLowerBound={float(divisionLowerBound)} divisionUpperBound={float(divisionUpperBound)}")
       print(f"\t\ttableLowerBound={float(tableLowerBound)} tableUpperBound={float(tableUpperBound)}")
       print(f"\t\tswapMultiplier={float(swapMultiplier)} multiplier={float(multiplier)},cumulativeMultiplier={float(cumulativeMultiplier)}")
       print(f"\t\tintermediateResult={float(intermediateResult)}")
       
       print(f"############# Loop Variable Status ###############################")

       #OUTPUT FORMATTING LINE BREAK
       print(f"\n")
       
       print(f"############# Iteration - {float(currentIterationNumber)}  Started ###############################")
       print(f"\t^^^^^^^^^^^^^^^^^^^^ Counter - {float(counter)}  Started ^^^^^^^^^^^^^^^^^^^^^")

       swapMultiplier = cumulativeMultiplier
       cumulativeMultiplier = getCumulativeMultiplier(currentIterationNumber,1,counter,divisionBaseLowerBound)
       multiplier = getMultiplier(currentIterationNumber,1,counter,divisionBaseLowerBound)
       print(f"\t\tMultiplier updated from {float(swapMultiplier)} to {float(cumulativeMultiplier)}")
       print(f"\t\t <><><>tableLowerBound= {float(tableLowerBound)},tableBaseLowerBound={float(tableBaseLowerBound)} ,multiplier= {float(multiplier)},cumulativeMultiplier={float(cumulativeMultiplier)}")
       
       
       if multiplier < 0:
              print(f"############# INVALID MULTIPLIER FOUND ###############################")
              break
       else:
              #intermediateResult = tableLowerBound  * multiplier
              intermediateResult = getIntermediateResult(currentIterationNumber,multiplier,tableLowerBound,tableBaseLowerBound,counter,decimalDivisor)
              print(f"\n[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[")
              print(f"\t\t Loop Variable Just After getting intermediateResult")
              print(f"\t\tdivisionLowerBound={float(divisionLowerBound)} divisionUpperBound={float(divisionUpperBound)}")
              print(f"\t\ttableLowerBound={float(tableLowerBound)} tableUpperBound={float(tableUpperBound)}")
              print(f"\t\tIntermediate Result={float(intermediateResult)} and Decimal Divident={float(decimalDivident)}")
              print(f"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\n")
       #Core Logic

       if intermediateResult < decimalDivident:  
              print(f"\t\tEntered If Part of Core Decision Logic")
              print(f"\t\t#Updating Table Lower Bound from {float(tableLowerBound)} to {float(intermediateResult)}")
              print(f"\t\t# multiplier={float(multiplier)} cumulativeMultiplier={float(cumulativeMultiplier)}")
              tableLowerBound = intermediateResult
             
              #lower bound
              if cumulativeMultiplier > divisionLowerBound:
              print(f"\t\t# Updating Division Lower Bound from {float(divisionLowerBound)} to {float(cumulativeMultiplier)}")
              divisionLowerBound = cumulativeMultiplier

              counter=counter+1
       elif  intermediateResult == decimalDivident:
              print(f"\t\tEntered Else If Part of Core Decision Logic")
              counter = counter +1
              swapMultiplier = cumulativeMultiplier
              divisionBaseLowerBound = divisionLowerBound #required
              multiplier = getMultiplier(currentIterationNumber,1,counter,divisionBaseLowerBound)
              cumulativeMultiplier = getCumulativeMultiplier(currentIterationNumber,1,counter,divisionBaseLowerBound)
             
              divisionLowerBound = cumulativeMultiplier

              tableUpperBound =intermediateResult
              tableBaseLowerBound = tableLowerBound
              tableLowerBound = intermediateResult      

              print(f"\t\t# multiplier={float(multiplier)},cumulativeMultiplier={float(cumulativeMultiplier)} ,divisionUpperBound={float(divisionUpperBound)}")
              print(f"\t\tdivisionLowerBound={float(divisionLowerBound)} divisionUpperBound={float(divisionUpperBound)}")
              print(f"\t\ttableLowerBound={float(tableLowerBound)} tableUpperBound={float(tableUpperBound)}")
              print(f"\t\tIntermediate Result={float(intermediateResult)} and Decimal Divident={float(decimalDivident)}")

              isExactDivision=True
              isLoopBroken =True
       else:
              print(f"\t\tEntered Else Part of Core Decision Logic")
              print(f"\t\t# Updating Table Upper Bound from {float(tableUpperBound)} to {float(intermediateResult)}")
              divisionBaseLowerBound = divisionLowerBound #required
              tableUpperBound =intermediateResult
              tableBaseLowerBound = tableLowerBound

              #upper bound
              if multiplier < divisionUpperBound:
              print(f"\t\t# Updating Division Upper Bound from {float(divisionUpperBound)} to {float(cumulativeMultiplier)}")
              print(f"\t\t# cumulativeMultiplier={float(cumulativeMultiplier)}")
              divisionUpperBound = cumulativeMultiplier

              print(f"\t************************Counter - {float(counter)}  Ended ***************************\n")
              counter=counter+1

       if isExactDivision ==False:
              print(f"\n\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
              print(f"\t\t# Current Lower Bound & Upper Bound Status for Division & Table")
              print(f"\t\tdivisionLowerBound={float(divisionLowerBound)} divisionUpperBound={float(divisionUpperBound)}")
              print(f"\t\ttableLowerBound={float(tableLowerBound)} tableUpperBound={float(tableUpperBound)}")
              print(f"\t\tIntermediate Result={float(intermediateResult)} and Decimal Divident={float(decimalDivident)}")
              print(f"\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n")


       if isLoopBroken == True:
              print(f"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<RESULT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
              print(f"##################isExactDivision = {isExactDivision}###################")
              if isExactDivision == False:
              print(f"{float(decimalDivident)} lies between {float(tableLowerBound)} and {float(tableUpperBound)}")
              print(f"Division {float(intermediateResult)} lies between {float(divisionLowerBound)} and {float(divisionUpperBound)}")
              elif isExactDivision == True:
              print(f"{float(decimalDivident)} lies between {float(tableLowerBound)} and {float(tableUpperBound)}")
              print(f"Division {float(intermediateResult)} equals {float(divisionLowerBound)}")
              break
       else:
              #total allowed iterations
              if intermediateResult >= decimalDivident:  
              #starting next iteration
              print(f"############# Iteration - {float(currentIterationNumber)}  Ended ###############################")
              print(f"############# totalExpectedIteration={float(totalExpectedIteration)}  and  currentIterationNumber={float(currentIterationNumber)}###############################")
              if totalExpectedIteration > currentIterationNumber:
                     print(f">>>>>>>>>>>>>>>>AFTER {float(currentIterationNumber)} iteration<<<<<<<<<<<<<")
                     print(f"{float(decimalDivident)} lies between {float(tableLowerBound)} and {float(tableUpperBound)}")
                     print(f"Division {float(decimalDivident)}/{float(decimalDivisor)} lies between {float(divisionLowerBound)} and {float(divisionUpperBound)}")

                     currentIterationNumber = currentIterationNumber +1
                     counter =1
                     print(f">>>>>>>>>>>>>>>> Iteration Incremented To {float(currentIterationNumber)} & Counter to {float(counter)} <<<<<<<<<<<<<<<")

                     multiplier = getMultiplier(currentIterationNumber,1,counter,divisionLowerBound)
                     intermediateResult = getIntermediateResult(currentIterationNumber,multiplier,tableLowerBound,tableBaseLowerBound,counter,decimalDivisor)
              else:
                     print(f"\n>>>>>>>>>>>>>>>>Maximuim No Of Allowed Iteration Reached<<<<<<<<<<<<<<<<<<<")
                     print(f"------------------After {float(totalExpectedIteration)} iterations Reached To End of Program for {float(decimalDivident)}/{float(decimalDivisor)}-----------------------")
                     isLoopBroken = True
                     print(f"\n\n################# Infinite Loop Has Broken #################################\n")

   

I have not yet finetuned code but it works for 378/24 division.

Happy Coding!

No comments:

Post a Comment