Trying binary search but decimal, floating points making it inaccurate. Why?
print('Enter your input:')
n = input()
def binarysearch(n):
j = float(n)/2
i = k = j/2
while round(i,2)*round(i,2) != float(n):
if round(i,2)*round(i,2) < float(n):
k = round(i, 2)
i += round(((j-i)/2),2)
round(i, 2)
print(i, 'less') # just for tracking
if round(i,2)*round(i,2) > float(n):
j = round(i, 2)
i -= round(i/2,2)
round(i, 2)
print (i, 'more') # just for tracking
return i
print (binarysearch(n))
Output -
Enter your input:
9
3.00999999999998
3.37 less
1.6800000000000002 more
2.52 less
2.95 less
3.16 less
1.58 more
2.37 less
2.77 less
2.97 less
3.06 less
1.53 more
2.3 less
2.6799999999999997 less
2.8699999999999997 less
2.9699999999999998 less
3.0199999999999996 less
1.5099999999999996 more
2.2699999999999996 less
2.6499999999999995 less
2.8399999999999994 less
2.9299999999999993 less
2.979999999999999 less
2.999999999999999 less
2.999999999999999
Enter your input:
36
6.009999999999916
4.5 more
6.75 less
3.37 more
5.0600000000000005 less
5.9 less
6.32 less
3.16 more
4.74 less
5.53 less
5.930000000000001 less
6.120000000000001 less
3.060000000000001 more
4.590000000000001 less
5.3500000000000005 less
5.73 less
5.920000000000001 less
6.0200000000000005 less
3.0100000000000007 more
4.510000000000001 less
5.260000000000001 less
5.640000000000001 less
5.830000000000001 less
5.920000000000001 less
5.970000000000001 less
5.99 less
6.0 less
6.0
and numbers that are not square root, the search will never finish.