-
[C언어] 하드웨어의 한계Stage/Computer Science 2021. 5. 27. 09:03
학습목표
메모리 용량이 프로그램의 구동에 미치는 영향을 설명할 수 있다.
우리가 작성한 프로그램은 구동 중에 RAM에 저장이 된다.
RAM은유한한 크기
의 비트만 저장할 수 있으므로 때때로 부정확한 결과를 내기도 한다.1. 부동 소수점 부정확성
#include <cs50.h> #include <stdio.h> int main(void) { float x = get_float("x: "); float y = get_float("y: "); printf("x / y = %.50f\n", x / y); }
- x / y를 했을 때 소수점 50자리까지 출력하는 코드이다.
- x = 1, y = 10 을 대입해보자.
- x / y = 0.10000000149011611938476562500000000000000000000000
- 0.1 이라는 결과가 나와야 하는데, 결과 값이 좀 이상하다.
- float는 유한한 크기의 비트를 저장할 수 있기 때문에 다소 부정확한 결과를 내는 것이다.
2. 정수 오버플로우
#include <stdio.h> #include <unistd.h> int main(void) { for (int i = 1; ; i *= 2) { printf("%i\n", i); sleep(1); } }
- 1부터 시작해서 2를 곱해 나가는 코드이다.
- 변수 타입을 int로 설정했기 때문에 2를 계속 곱해나가다보면 int가 저장할 수 있는 수를 넘게 되는 순간이 온다.
... 1073741824 overflow.c:6:25: runtime error: signed integer overflow: 1073741824 * 2 cannot be represented in type 'int' -2147483648 0 0 ...
- 이런 에러와 함께 0이 출력되고 있다.
'Stage > Computer Science' 카테고리의 다른 글
[배열] 디버깅 (0) 2021.05.27 [배열] 컴파일링 (0) 2021.05.27 [C언어] 사용자 정의 함수, 중첩 루프 (0) 2021.05.27 [C언어] 자료형, 형식 지정자, 연산자 (0) 2021.05.27 [C언어] 조건문과 루프 (0) 2021.05.26