Так что я делаю это как домашнее задание. Я понимаю, что существует так много способов, чтобы этот код мог быть более эффективным и точным, но так хочет мой профессор.C++ Поиск квадратного корня без функции слияния цикла sqrt
У меня проблемы с петлей. Когда я прошу квадратный корень из 67, он находит его, но он трижды повторяет правильный ответ.
Enter a value to be square rooted:
67
33.5
guess = 17.75
guess = 10.7623
guess = 8.49387
guess = 8.19096
guess = 8.18535
guess = 8.18535
guess = 8.18535
The program took 7 guess to find an estimation.
Когда я пытаюсь найти квадратный корень из 5 он находит ее, но продолжает петлю на неопределенный срок
using namespace std;
int main()
{
double guess2;
double squarenumber;
double guess1;
int numofguess = 0;
cout << "Enter a value to be square rooted: " << endl;
cin >> squarenumber;
guess1 = squarenumber/2;
cout << guess1 << endl;
do
{
guess2 = (guess1 - (((guess1 * guess1) - squarenumber)/(2* guess1)));
guess1 = guess2;
cout << "guess = " << guess2 << endl;
numofguess = numofguess + 1;
} while ((guess2 * guess2) > squarenumber);
cout<< "The program took "<< numofguess <<" guess to find an estimation.";
return 0;
}
Что вы наблюдали , а через свой код, по очереди, в отладчике? –
Попробуйте напечатать 'guess2 * guess2' каждый раз через цикл. Обязательно распечатайте его с большим количеством цифр точности. – Barmar
Двойной держит более 6 десятичных цифр, поэтому, возможно, разница в цифрах, которые вы не видите. Проверьте это сообщение [Является ли математика с плавающей запятой?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –