kev0960   9년 전

결과적으로 구해야 하는게 H_n = 1/1 + 1/2 + ... + 1/n 이라 한다면, n * (H_n - H_(n-m)) 인건데, 왜 결과가 틀렸다고 나올까요 ㅠㅠ

baekjoon   9년 전

왜냐하면 log함수 때문입니다.

log함수는 1에 가까운 값을 넣었을 때, 올바른 값을 리턴하지 않습니다. 이럴때는 log1p 함수를 사용하세요.

kev0960   9년 전

그래서 n 이 10000000 이상일 때만 로그함수를 사용하는 harmonic 함수를 호출하고, 아니면 그냥 harmonic_calc 함수를 호출하였는데요ㅠㅠ

(항상 n > m 이므로 m > 100000000 임을 검사하는 첫번째 if 문에서 이를 처리한 것으로 생각됩니다.)

baekjoon   9년 전

컴퓨터에서 소수점은 정확한 값을 갖지를 못하는데, 저런식으로 누적하다보면, 오차는 점점 커지게 됩니다.

그리고 10^18을 for문을 이용해서 돌면 시간 초과를 받게 됩니다.

zzapCoder   9년 전

이 문제는 어떻게 푸는지 정말 궁금하네여....

댓글을 작성하려면 로그인해야 합니다.