Here is my another implementation of multiplication of decimal
number.As my previous blog i am using matrix & tables of 1to 9,
to complete whole multiplication.
Multiplication of rational numbercan also be implemented using
same algorithm just by converting those fractions by sufficient
power of ten & then readjusting result decimal point.
Code:
from collections import defaultdict
import math
decimalMultiplicand: int = 378
decimalMultiplier: int = 24
# 378/23 = 8694
def decimalToArray(n):
return [int(digit) for digit in str(n)]
def getMultiplication(multiplicand: int, multiplier: int):
try:
multiplicandArray = decimalToArray(decimalMultiplicand)
multiplierArray = decimalToArray(multiplier)
alternateMultiplicationSequenceDict = defaultdict(list)
# finding size of each decimal number
multiplicandLength = len(multiplicandArray)
multiplierLength = len(multiplierArray)
total = multiplicandLength + multiplierLength
muliplicationMatrix = [[] * total for _ in range(total)]
print(f"Multiplying:'{multiplicand}' by '{multiplier}'")
# i counter for operand & j counter for operator
i = 0
while i < multiplicandLength:
j = 0
while j < multiplierLength:
k = multiplicandArray[multiplicandLength - i - 1]
l = multiplierArray[multiplierLength - j - 1]
multiplication = k * l
zeroPosition = multiplication % 10
onePosition = multiplication // 10
alternateMultiplicationSequenceDict[zeroPosition].append({
"operandDecimalPosition": i,
"operatorDecimalPosition": j,
"multipleOfTen": False
})
alternateMultiplicationSequenceDict[onePosition].append({
"operandDecimalPosition": i,
"operatorDecimalPosition": j,
"multipleOfTen": True
})
muliplicationMatrix[i+j].append(zeroPosition)
muliplicationMatrix[i+j+1].append(onePosition)
j = j+1
i = i+1
i = 0
rowSum =0
multiplication = 0
while i < total:
j = 0
while j < len(muliplicationMatrix[i]):
rowSum = rowSum + muliplicationMatrix[i][j]
j=j+1
zeroPosition = rowSum % 10
onePosition = rowSum // 10
rowSum = onePosition
if multiplication <= 0:
multiplication =zeroPosition
else:
multiplication = zeroPosition * 10 ** i + multiplication
i=i+1
print(f"Result:{multiplicand} * {multiplier}={multiplication}")
except Exception as e:
print(f"An error occured:{e}")
raise
getMultiplication(decimalMultiplicand, decimalMultiplier)
Code seems to useful to build decimal circuit that can replace binary circuit
for specific purpose of mathematical calculations.
No comments:
Post a Comment