#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc != 2) {
printf("Too many arguments.\n", argc);
return 1;
}
double n;
n = atof(argv[1]);
if (n<0) {
printf("Negative argument.\n");
return 1;
}
double r;
r = n;
int iteration;
iteration = 0;
while(calcError(n,r)<1e-6) {
iteration = iteration +1;
r = (r + n/r)/2;
printf(" %d. sqrt(%f)~= %f,error=%e\n",iteration,n,r,calcError(r,n));
}
printf("sqrt(%f)=%f to six places\n",n,r);
return 0;
}
int calcError (double n, double r) {
double delta;
delta = n-r*r;
delta = delta > 0 ? delta : -delta;
return 0;
}
이 코드를 실행하면 while 루프가 무한대로 생성됩니다. 형식 '% e'는 'double'형식의 인수를 예상하지만 인수 5는 'int'[-Wformat] 형식을 갖는 경고가 표시됩니다. 왜 이런거야?while 루프가 무한 이유가 무엇입니까?
감사합니다. 그러나 해당 변경 내용으로 코드를 실행해도 동일한 경고가 생성됩니다. 더 이상 무한 루프가 아니라 더 이상 while 루프를 완전히 우회하여 다음과 같이 표시합니다 : sqrt (24.000000) = 24.000000 to six places – normystar
오류가 엡실론보다 큰 경우 반복 할 것입니다. this :'while (calcError (n, r)> 1e-6) ' – krzaq
[this] (http://melpon.org/wandbox/permlink/Oqw54hodZugBWEnn)이 당신이 원했던 것입니다. 그건 그렇고,'printf'에 대한'calcError'의 호출은 역순으로 인수를가집니다. – krzaq