# I not able to understand what type error I am making in the while loop

1 view (last 30 days)
Manav Divekar on 4 Nov 2021
Commented: Rik on 6 Nov 2021
I want to use babyloniansqrt to work if Error value should be grater than threshold and this will update the x and E value, using xnext = (x+S./x)/2, E = abs(S-xnext.^2) formula. Please check my code and let me know what I am doing wrong
function out = babyloniansqrt(S,threshold)
x = 1;
if ~exist('threshold','var')
threshold = 0.00001;
end
E = abs(S-x.^2);
while ~(E<threshold)
xnext = (x+S./x)/2;
E = abs(S-xnext.^2);
end

Rik on 4 Nov 2021
Edited: Rik on 6 Nov 2021
You aren't updating the value itself, so the calculation is the exact same on every iteration.
function out = babyloniansqrt(S,threshold)
%
% write usage instructions and explanation here
x = 1;
if nargin<2
%set default threshold if not provided
threshold = 10^-5;
end
E = inf; %set initial value to enter the loop
while E>threshold
x = (x+S./x)/2;
E = abs(S-x.^2);
end
out=x;
end
Rik on 6 Nov 2021
Thanks for the correction Jan, I have edited my answer.

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!