2014-02-18 3 views
-4

Я пытаюсь сделать программу на C, чтобы найти примерный квадратный корень из числа, используя формулу NG = 0,5 (LG + N/LG). До сих пор у меня есть:Программа квадратного корня в C без использования функции sqrt

#include <stdio.h> 
#include <math.h> 
int main(){ 
    double n; 
    double LG=1; 
    double NG; 
    printf("Enter number"); 
    scanf_s("%lf",&n); 
    do{ 
     NG=(.5*(LG+n/LG)); 
     LG=NG; 
    }while((NG*NG-n)<.005); 
    printf("The root is %lf",NG); 
} 

Эта структура отлично работает в Java, но не кажется, что выполнение в С.

Спасибо за любые советы цикл.

+3

Не должно ли утверждение внутри цикла быть «NG = (. 5 * (LG + n/LG)); – MBlanc

+1

Вы поместили его в отладчик, установили точку останова и выполнили код? Если нет, почему бы и нет? – abelenky

+0

Должно быть, я имел в виду 0,5, это была опечатка, извините. – user3221816

ответ

3

Вы не хотите контура, а NG*NG-n меньше .005. Вы хотите выполнить петлю, пока NG*NG находится дальше от n, чем хотелось бы.

Расстояние от NG*NG до n - fabs(NG*NG - n).

+0

О, о, вы правы, спасибо. Теперь он возвращает значение, но это неправильное значение. Например, ввод 49 возвратов 25 и ввод 36 возвратов 18.5. – user3221816

+0

@ user3221816 Суждение, вероятно, обратное. use '} while (fabs (NG * NG-n)>. 005);' – BLUEPIXY

+0

@ user3221816: Не использование 'fabs' не является единственной ошибкой. Подумайте о ** в то время как ** часть. Вы зацикливаетесь **, а ** что-то истинно. Loop ** while ** номер слишком далеко, а не пока номер слишком близко. –

Смежные вопросы