#include /* This one counts the number of repetitions it has taken so far, so we can see how quickly it gets the answer right. Some times it doesn't notice that it has got the answer because some numbers haven't got an exact square root then the computer can represent as a double */ double guess_sqrt(double xsquared, double min, double max, int reps) { if (max < min) { cout << " Error no solution\n"; exit(1); } const double middle = (min+max)/2; const double midsquared = middle * middle; if (midsquared == xsquared) return middle; else if (midsquared > xsquared) { cout << reps << ": " << setprecision(20) << middle << " is too big\n"; return guess_sqrt(xsquared, min, middle, reps+1); } else { cout << reps << ": " << setprecision(20) << middle << " is too little\n"; return guess_sqrt(xsquared, middle, max, reps+1); } } void main() { cout << "What? "; const double question = read_double(); const double result = guess_sqrt(question, 0, question+1, 1); cout << setprecision(20) << result << " squared = " << question << "\n"; }