#include<stdio.h>
#include<stdlib.h>
#define abs(a) ((a)>0 ? a: -a)
#define eps_sqrt 0.00000000000001
#define it 100
float sqrt(float x)
/*The Square Root Function using the Newton's Method*/
{
int it_sqrt=0;
float a_sqrt = x/2;
while ((abs((a_sqrt*a_sqrt)-(x))>=eps_sqrt) && (2.0*a_sqrt != 0) && (it_sqrt<=it))
{
a_sqrt = a_sqrt - ((a_sqrt*a_sqrt)-(x)/(2.0*a_sqrt));
it_sqrt++;
}
return a_sqrt;
}
int main()
{
printf("%.5f\n", sqrt(5));
system ("pause");
}
필자는 Newton의 반복 방법을 사용하여 파이썬에서 제곱근을 찾았으며 완벽하게 작동했습니다. 저는 C 언어에 익숙하지 않아이 기능이 왜 작동하지 않는지 이해할 수 없습니다. 실행할 때마다 "-1. # INF0A"가 반환됩니다. 도움이 될 것입니다.함수와 부동 소수점 비교
편집 : 나는 0.000001
에 EPS를 바꾸는 시도하고 또한 작동하지 않았다.
에 나는 그것을 시도했지만 여전히 같은 결과를 –
잘못된 매크로 기능 복근 인수를 제공합니다. 내 대답을 보라. – BLUEPIXY
자신의 집에서 만든 'abs' 매크로를 사용하지 않으면, 인수를 두 번 평가합니다. C 라이브러리에는이를위한 'fabs'가 있습니다. 이것은 일반적으로 내장되어 있으므로 성능은 동일하지만 안전합니다. –