Interestingly enough, this method seems to almost purposely avoid the inclusion of decimal figures within its algorithmic components. I’m not sure if this was the result of a greater aversion to irrational figures, or simply just a coincidence of the consequence of its design.
The methodology which I will be referencing throughout this entry can be found below:
“Ethiopian Binary Math | the Engines of Our Ingenuity.” Engines.egr.uh.edu, engines.egr.uh.edu/episode/504. Accessed 24 Feb. 2024.
Example of Method Application
For our example, we will multiply the values of 9 and 115.
If we were to perform this multiplication exercise though the utilization of our modern multiplication algorithm, we would take a far different approach. However, if we were to approach this mathematical inquiry from the Ethiopian perspective, we would take the following steps.
After having dealt with the first value, we would record the second initial value (115), and then record the product of that value multiplied by 2. Next, we would then record that value’s (115) product after multiplying by 2 (230). We would then continue this process until the number of values within the second column, equals the number of values contained within the first column.
To come to the final sum, we would add all of the values within the Value 2 column which possess a corresponding odd number entry within the Value 1 column.
If we were to reverse the order of multiplication, 115 multiplied by 9, as opposed to 9 multiplied by 115, our outcome would not change. Although, the column values would differ.
val1 <- 115
# The second value within the multiplication equation #
val2 <- 9
###########################################################################
vec1 <- c()
vec2 <- c()
while (val1 != 0)
{
vec1 <<- c(vec1, val1)
print(val1)
val1 <- val1 - ceiling(val1/2)
}
# Number of observational entries for val1 #
n <- length(vec1)
while (n != 0)
{
vec2 <<- c(vec2, val2)
print(val2)
val2 <- val2 * 2
n <<- (n - 1)
}
# Create data frame #
Eth_Frame <- data.frame(vec1, vec2)
# Function which identifies odd elements within a vector #
odds <- function(x) subset(x, x %% 2 != 0)
# Identify odd elements #
odd_values <- odds(vec1)
# Match odd elements within odd_values vector to Eth_Frame variable 'vec1' #
Eth_Frame$odd_vec <- odd_values[match(Eth_Frame$vec1, odd_values)]
# Remove all observational values in which vec1 = odd_vec within 'Eth_Frame' #
Eth_Frame <- subset(Eth_Frame, Eth_Frame$vec1 == Eth_Frame$odd_vec)
# Sum all remaining elements within variable 'vec2', within data frame 'Eth_Frame' #
sum(Eth_Frame$vec2)
###########################################################################
Corresponding output:
> sum(Eth_Frame$vec2)
[1] 1035
If you would like to see the contents of each column prior to the calculation being completed, print the Eth_Frame to the console prior to defining the odds function. Also, try reversing each value’s entry within the code (val1 <- 9 val2 <- 115), to verify that order does not play a role in determining the algorithm’s outcome.
Final Thoughts
I’m not going to pontificate too deeply on the concept detailed within this entry. However, some scholars have found similarities when comparing this method of multiplication, to the way in which digital computing methodologies handle similar tasks. I do find it fascinating that the genesis of many of the concepts which empower modernity, seem to find their un-actualized origins within prior historic periods.
It is also thought provoking in that, the aversion to zero and irrationality in mathematics which began in Greece, continued to haunt the west, and some western adjacent societies for an absurd duration of time.
For more on that topic, please refer to the link below:
Matson, John. “The Origin of Zero.” Scientific American, 21 Aug. 2009, www.scientificamerican.com/article/history-of-zero/.
Until next time.
-RD