NUMB3RS 코드 질문 songgj123 어제 NUMB3RS 문제를 스스로 풀어서 정답이 나왔습니다. 부족한 점을 보완하려고 책을 봤는데 이해가지 않는 부분이 있어 질문합니다. double NUMB3RS(int v, int day) { if (day == 0) { if (v == p) { return 1; } else { return 0; } } if (ret != -1) { return ret; } ret = 0; for (int before = 0; before < n; before++) { if (village[v][before] == 1) { ret = ret + (NUMB3RS(before, day - 1) / connect[before]); } } return ret; } 이게 저의 코드이고 이 코드에서 if(ret != -1) 을 if(ret > -0.5) 로 바꾼 것이 책의 코드입니다. 단순히 cache를 -0.5 보다 작은 값으로 초기화해서 저런 코드를 쓴 건가요?? 이유가 궁금합니다. 9년 전
3개의 댓글이 있습니다. Corea float, double 등의 부동 소수점 표현 방식은 구조적인 문제로 오차가 생길 수밖에 없습니다. [[자주 하는 실수 모음]]의 소수 처리 부분을 읽어보시면 도움이 되실 겁니다. 9년 전 link songgj123 그러니까 double A 변수에 -1.0을 저장해도 오차로 인해 A == -1.0 이 false 일 수 있다는 얘기 맞나요?? 9년 전 link Corea 넵. 아마도 -1.0에서는 문제가 생기지 않을 것 같지만, 방어적으로 코딩하기 위해 저러한 습관을 들이는 것은 좋다고 생각합니다. 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
songgj123
어제 NUMB3RS 문제를 스스로 풀어서 정답이 나왔습니다.
부족한 점을 보완하려고 책을 봤는데
이해가지 않는 부분이 있어 질문합니다.
이게 저의 코드이고
이 코드에서
if(ret != -1) 을
if(ret > -0.5) 로 바꾼 것이 책의 코드입니다.
단순히 cache를 -0.5 보다 작은 값으로 초기화해서 저런 코드를 쓴 건가요??
이유가 궁금합니다.
9년 전