다음은 이진을 사용하여 sqrt를 계산하는 간단한 프로그램입니다. sqrtr (4,1,4)와 같은 호출로이를 실행하는 동안 무한 재귀가 발생합니다. 왜 이런 일이 일어나는지 알 수 없습니다. 당신은 당신의 low == high
비교 범위를 넣어 할 수 있습니다숫자의 sqrt를 찾는 재귀 함수의 문제점
double sqrtr(double N , double Low ,double High )
{
double value = 0.00;
double mid = (Low + High + 1)/2;
if(Low == High)
{
value = High;
}
else if (N < mid * mid)
{
value = sqrtr(N,Low,mid-1) ;
}
else if(N >= mid * mid)
{
value = sqrtr(N,mid,High) ;
}
return value;
}
반올림 불일치 경계 조건이 냄새가납니다. –
http://docs.sun.com/source/806-3568/ncg_goldberg.html –
@Platinum Azure : 놀랍게도 충분하지 않습니다. +1 부분이 정수 알고리즘에서 도난 당했다고 적힌 jpalecek의 공로. 그것은 당신에게 완전히 잘못된 경계를 제공하므로 더 이상 둥근 방법이 중요하지 않습니다. – MSalters