0

Does anyone know how to solve this problem?

Part 1 Encapsulate the following Python code from Section 7.5 in a function named my_sqrt that takes a as a parameter, chooses a starting value for x, and returns an estimate of the square root of a. while True: y = (x + a/x) / 2.0 if y == x: break x = y Part 2 Write a function named test_sqrt that prints a table like the following using a while loop, where "diff" is the absolute value of the difference between my_sqrt(a) and math.sqrt(a). a = 1 | my_sqrt(a) = 1 | math.sqrt(a) = 1.0 | diff = 0.0 a = 2 | my_sqrt(a) = 1.41421356237 | math.sqrt(a) = 1.41421356237 | diff = 2.22044604925e-16 a = 3 | my_sqrt(a) = 1.73205080757 | math.sqrt(a) = 1.73205080757 | diff = 0.0 a = 4 | my_sqrt(a) = 2.0 | math.sqrt(a) = 2.0 | diff = 0.0 a = 5 | my_sqrt(a) = 2.2360679775 | math.sqrt(a) = 2.2360679775 | diff = 0.0 a = 6 | my_sqrt(a) = 2.44948974278 | math.sqrt(a) = 2.44948974278 | diff = 0.0 a = 7 | my_sqrt(a) = 2.64575131106 | math.sqrt(a) = 2.64575131106 | diff = 0.0 a = 8 | my_sqrt(a) = 2.82842712475 | math.sqrt(a) = 2.82842712475 | diff = 4.4408920985e-16 a = 9 | my_sqrt(a) = 3.0 | math.sqrt(a) = 3.0 | diff = 0.0 Modify your program so that it outputs lines for a values from 1 to 25 instead of just 1 to 9.

3rd Mar 2022, 4:04 AM
Jermaine Tucker
Jermaine Tucker - avatar
7 Réponses
+ 2
I figured it out.
3rd Mar 2022, 5:57 AM
Jermaine Tucker
Jermaine Tucker - avatar
+ 1
Nice one Jermaine Tucker For my inquisitive nature: are there any that were more than 16 decimal points away from the math.sqrt value? I see the few you listed were 1.7*10^-16 and 4.4*10^-16 0.00000000000000044089 is a pretty small number! EDIT: I suspect that e-16 might just be the accuracy of an int variable, which is why the bespoke my_sqrt function is different to the math.sqrt answer. Perhaps we could cast the variable to a long int or a double? Wait up, this is Python, so maybe it self adjusts to a double?
3rd Mar 2022, 6:03 AM
HungryTradie
HungryTradie - avatar
+ 1
I will let you know in the morning.
3rd Mar 2022, 9:35 AM
Jermaine Tucker
Jermaine Tucker - avatar
+ 1
Woah.
4th Mar 2022, 9:45 PM
Miklós
Miklós - avatar
0
That looks like a nice challenge, what is your first step? My approach would be to write some psuedocode to capture the instructions + start my logic. Would you like us to review your attempt?
3rd Mar 2022, 4:16 AM
HungryTradie
HungryTradie - avatar
0
this was the output: a = 1 | my_sqrt(a) = 1.0 | math.sqrt(a) = 1.0 | diff = 0.0 a = 2 | my_sqrt(a) = 1.414213562373095 | math.sqrt(a) = 1.4142135623730951 | diff = 2.220446049250313e-16 a = 3 | my_sqrt(a) = 1.7320508075688772 | math.sqrt(a) = 1.7320508075688772 | diff = 0.0 a = 4 | my_sqrt(a) = 2.0 | math.sqrt(a) = 2.0 | diff = 0.0 a = 5 | my_sqrt(a) = 2.23606797749979 | math.sqrt(a) = 2.23606797749979 | diff = 0.0 a = 6 | my_sqrt(a) = 2.449489742783178 | math.sqrt(a) = 2.449489742783178 | diff = 0.0 a = 7 | my_sqrt(a) = 2.6457513110645907 | math.sqrt(a) = 2.6457513110645907 | diff = 0.0 a = 8 | my_sqrt(a) = 2.82842712474619 | math.sqrt(a) = 2.8284271247461903 | diff = 4.440892098500626e-16 a = 9 | my_sqrt(a) = 3.0 | math.sqrt(a) = 3.0 | diff = 0.0 a = 10 | my_sqrt(a) = 3.162277660168379 | math.sqrt(a) = 3.1622776601683795 | diff = 4.440892098500626e-16 a = 11 | my_sqrt(a) = 3.3166247903554 | math.sqrt(a) = 3.3166247903554 | diff = 0.0 a = 12 | my_sqrt(a) = 3.4641016151377544 | math.sqrt(a) = 3.4641016151377544 | diff = 0.0 a = 13 | my_sqrt(a) = 3.6055512754639896 | math.sqrt(a) = 3.605551275463989 | diff = 4.440892098500626e-16 a = 14 | my_sqrt(a) = 3.7416573867739413 | math.sqrt(a) = 3.7416573867739413 | diff = 0.0 a = 15 | my_sqrt(a) = 3.872983346207417 | math.sqrt(a) = 3.872983346207417 | diff = 0.0 a = 16 | my_sqrt(a) = 4.0 | math.sqrt(a) = 4.0 | diff = 0.0 a = 17 | my_sqrt(a) = 4.123105625617661 | math.sqrt(a) = 4.123105625617661 | diff = 0.0 a = 18 | my_sqrt(a) = 4.242640687119286 | math.sqrt(a) = 4.242640687119285 | diff = 8.881784197001252e-16 a = 19 | my_sqrt(a) = 4.358898943540673 | math.sqrt(a) = 4.358898943540674 | diff = 8.881784197001252e-16 a = 20 | my_sqrt(a) = 4.47213595499958 | math.sqrt(a) = 4.47213595499958 | diff = 0.0 a = 21 | my_sqrt(a) = 4.58257569495584 | math.sqrt(a) = 4.58257569495584 | diff = 0.0 a = 22 | my_sqrt(
4th Mar 2022, 1:54 PM
Jermaine Tucker
Jermaine Tucker - avatar
0
All errors are in the magnitude of 10^-16 I reckon it is the difference between variable types.
4th Mar 2022, 11:25 PM
HungryTradie
HungryTradie - avatar