i cant pass tests where code is printing the result and tests with 0.001 and 0.25. I don’t really understand the essence of the task because binary search and the bisection method are DIFFERENT things. There should be an interval, but only one number is given.
Your code so far
def square_root_bisection(tofind, toler=0.01, times=100):
if tofind < 0:
raise ValueError("Square root of negative number is not defined in real numbers")
if tofind == 0 or tofind == 1:
print(f"The square root of {tofind} is {tofind}")
return tofind**0.5
#recounting tolerance
n=0
i = toler
while i != 1:
i = i * 10
n +=1
interv = [0, tofind] #[low, high]
itertimes = times #separating iterations
while itertimes > 0:
mid = (interv[0]+interv[1])/2
if mid ** 2 > tofind:
interv[1] = mid
interv[1] = round(interv[1], n)
elif mid ** 2 < tofind:
interv[0] = mid
interv[0] = round(interv[0], n)
elif mid**2 == tofind or (interv[1]*10**n-interv[0]*10**n)/10**n <= toler*1:
interv[0] = round(interv[0], n)
interv[1] = round(interv[1], n)
print(interv)
print(f"The square root of {tofind} is approximately {(interv[1]*10**n-interv[0]*10**n)/10**n}")
return mid
#print(f"{(interv[1]*10**n-interv[0]*10**n)/10**n} / {toler*2}\n",interv, "\n")
itertimes -= 1
print(f"Failed to converge within {times} iterations")
return None
print(square_root_bisection(225, 1e-5, 100))
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 OPR/125.0.0.0
Challenge Information:
Implement the Bisection Method - Implement the Bisection Method
ok, but there’s another problem with floating dot: python can’t properly count result on printing stage. i was trying to solve the problem, but nothing changed
at the end of function python giving me this: “The square root of 225 is approximately 0.0“. so on output i cant give right number ( if square_root_bisection(225, 1e-5, 100)), because it just refuses to count as needed. also because of this problem i can’t solve tests №8-9
You aren’t really doing the bisection algorithm. Your add variable n is not part of the bisection algorithm. You should directly use the tol to shop iterating instead of creating this n.
def square_root_bisection(tofind, toler=0.01, times=100):
if tofind < 0:
raise ValueError("Square root of negative number is not defined in real numbers")
if tofind == 0 or tofind == 1:
print(f"The square root of {tofind} is {tofind}")
return tofind**1
interv = [0, tofind] #[low, high]
itertimes = times #separating iterations
while itertimes > 0:
mid = (interv[0]+interv[1])/2
if mid**2 == tofind or interv[1]-interv[0] <= toler*2:
print(interv)
print(f"The square root of {tofind} is approximately {interv[1]-interv[0]}")
return mid
elif mid ** 2 < tofind:
interv[0] = mid
else:
interv[1] = mid
itertimes -= 1
print(f"Failed to converge within {times} iterations")
return None
print(square_root_bisection(81, 0.001, 100))
still not. i don’t understand how i should cut the result
This is not how the instructions say to use the tolerance
For example, if the tolerance is 0.01, the bisection method will keep halving the interval until the difference between the upper and lower bounds is less than or equal to 0.01.
How should I return a value between two numbers when truncating, for example 14.999999, gives 15.0? (square_root_bisection(81, 1e-3, 50) should print The square root of 81 is approximately X, where X is a number between 8.999 and 9.001)