2012-05-09 6 views
2

GMP로 매우 큰 숫자의 제곱근 한도를 찾고 싶습니다. C에서는 ceil(sqrt(n))입니다.GMP 천장 기능

정수에 대한 GMP 제곱근은 결과를 자르므로 10의 제곱근은 3으로보고됩니다. 부동 소수점 제곱근은 예상대로 작동하지만 다음으로 큰 정수를 취해야합니다. mpf_get_d은 0으로 반올림하지만 다른 방식으로는 내가 원하는 것을 수행합니다. 어떻게 큰 숫자의 제곱근의 천장을 얻을 수 있습니까?

답변

1

mpf_ceil()을 사용하지 않는 특별한 이유가 있습니까? 내가 뭔가를 놓치지 않는 한 내게 논리적 인 발걸음처럼 들린다.

편집 : 질문을 다시 읽은 후 숫자를 정수로 처리해야하는 이유는 무엇입니까?

+0

아 .. 나는 그것을 보지 못했습니다. 나는 float 산술 및 부동 변환 섹션을보고있었습니다. 그것은 잡다한 부분에있었습니다. 나는 "GMP ceiling float function"의 다양한 조합을 찾지 못했습니다. –

+0

끝에 정수가 필요하며 최대한 빨리 변환하고 싶습니다. 제곱근은 정수가 아닌 계산의 유일한 부분입니다. –

+0

부동 소수점으로 변환하는 것은 분명히 효과적 일 수 있지만 충분한 정밀도로 작업하고 정수로 다시 변환하기 전에 결과를 올바르게 반올림해야합니다. 이 경우, +/- 1에 대한 나의 대답은 아마 더 간단하고 쉽게 검증 할 수 있습니다. – Mysticial

7

은 여기에 빠른 - 및 - 더러운 트릭 : trunc_sqrt(n) 현재 사용중인 GMP의 정수 제곱근 함수이다

ceil(sqrt(n)) = trunc_sqrt(n - 1) + 1 

.

이 값은 모든 정수에 적용됩니다. n > 0.