코딩과 디버깅에 관하여-2
디버깅에 관하여
예제 입력에서 원하는 결과와 다르게 나왔을때 어떻게 해야할까?
디버거를 켜고 프로그램이 실행되는 과정을 하나하나 따라가 보는 것도 좋지만 프로그래밍 대회에선 유용성이 제한된다.
디버거 없이 프로그램의 버그를 찾아내는 습관을 들이자
디버거를 사용하는 예외
- 도저히 모르겠을 때
- 런타임 오류
작은 입력으로 함수가 올바르게 돌아가는지 확인하자
변수 범위의 이해
산술 오버플로
대부분의 프로그래밍 언어에선 사칙연산에서 오버플로가 나더라도 별 다른 경고가 없다.
연산이 일어날 때마다 오버플로를 확인하는것이 너무 비효율적이기 때문이다.
프로그램의 정당성을 검증할 때 너무 논리의 정확성에만 집중하다보면 산술 오버플로를 간과할 수 있다.
자료형의 프로모션
C++에서의 규칙
- 한쪽은 d 한쪽은 f일때, d가 f로 바뀐다.
- 양쪽다 d거나 양쪽 다 f일때 , 넓은 범위를 갖는 자료형으로 바뀐다.
- 양쪽 다 int보다 작은 정수형인 경우 : 양쪽 다 int형을 변환된다.
- 부호없는 정수형과 부호 있는 정수형이 섞여있을 경우 : 부호없는 정수형으로 변환된다.
실수 자료형의 이해
실수는 부동소수점 방식이라 오차가 존재한다.
IEEE 754 표준으로 실수가 표기된다.
무한대, Nan이 존재하고, 멘티사, 익스포넨트, 부호비트로 이루어져있다.
실수 비교하기
실수는 오차가 있기 때문에 실수를 비교할 땐 a == b 가아닌 a - b < E 로 하는것이 좋다
여기서 E는 최소한의 오차이다
이쪽 실수 파트는 printf를 재구현할때 %f구현에서 한번 공부해본 것이다.
그 이상 실수를 공부하는것은 알고리즘과 무관하다고 판단하여 우선 넘어간다.