Introduction
Ancient trick to calculate ANY square root
(YouTube)
Click HERE
for more information
about the algorithm used in the video.
The video's algorithm require an initial seed
value (initial estimate of the square root).
Given a positive real number S, use the "nearest perfect
square" to S as the seed.
Note: The seed must be a non-zero positive number.
If the seed is far
away from the square root being calculated, the
algorithm will require more iterations and thus
will be less efficient.
Project #1
Watch the video. Create an interactive program to
- ask the user for a positive real number greater than zero
- calculate its square root using the
algorithm described in the video
(calculate to a least 3 or 4 decimal places)
- display the user's input
- display math.sqrt(user's input)
- for each iteration loop of the algorithm display
- the initial square used
- the square root of the initial square used
- the new square root calculated by the algorithm
- program loop
Note: For testing verify the answer using math.sqrt().
Project #2
Create a table of square roots and perfect squares.
(Integer square root 1 to 20.)
Square Root | Perfect Square |
1 | 1 |
2 | 4 |
3 | 9 |
4 | 16 |
5 | 25 |
... | ... |
Links
Methods of computing square roots
(Wikipedia)
A Proof That The Square Root of Two Is Irrational
(YouTube)
FYI
√n | Approximately |
√n | Approximately |
√2 | 1.41421 |
√10 | 3.16228 |
√3 | 1.73205 |
√π | 1.77245 |
√5 | 2.23607 |
√e | 1.64872 |
√6 | 2.44949 |
Your favorite number |
Useful Code?
import math
# ----------------------------------------------------------
# ---- Find the nearest perfect square to a given number
# ---- -----------------------------------------------------
# ---- Using the nearest perfect square makes the video's
# ---- algorithm more efficient. See the Wikipedia article.
# ---- -----------------------------------------------------
# ---- Apparently the Babylonians used a table to do this.
# ---- A table is simple, fast, and only needs to be
# ---- created/calculated one time.
# ---- -----------------------------------------------------
# ---- Note: this algorithm was found on the web
# ---- 1. calculate the square root of the number
# ---- 2. round it to the nearest integer
# ---- 3. square the rounded integer to get the closest
# ---- perfect square
# ---- 4. return the nearest perfect square root, and
# ---- the perfect square
# ----------------------------------------------------------
def nearest_perfect_square(num):
num_sqrt = math.sqrt(num)
round_sqrt = round(num_sqrt)
return (round_sqrt,round_sqrt*round_sqrt)
import user_interface as ui
# ----------------------------------------------------------
# ---- test if a string is a number greater than zero
# ---- if true, return the number
# ----------------------------------------------------------
def positive_number_greater_than_zero(string):
tf,n = ui.is_integer(string)
if tf:
if n > 0: return (True,n)
return (False,0)
tf,n = ui.is_float(string)
if tf:
if n > 0.0: return (True,n)
return (False,0.0)
import user_interface as ui
# ----------------------------------------------------------
# ---- main - get user input loop
# ----------------------------------------------------------
while True:
print()
s = ui.get_user_input(
'Enter a positive number greater that 0: ')
if not s: break # empty string?
tf,num = positive_number_greater_than_zero(s)
if not tf:
print()
print('Bad input. Try again.')
continue
nps_root,nps = nearest_perfect_square(num)
Note: Calling the algorithm
"Babylonian Style" is a
homage to In-N-Out Burger's secret menu.