본문 바로가기

CS/기타3

정지 문제(Halting problem)의 간단한 증명 증명을 위해 정지 문제를 판별할 수 있는 함수 H가 존재한다고 하자. (귀류법) 함수 H는 판별할 함수 I를 인자로 받는다. 이 때 함수 J를 아래와 같이 정의하면 모순이 발생한다. J의 인자로 J를 제공하면, - H(J)가 참이라면 J는 언젠가 끝난다는 뜻이지만 J는 무한루프에 의해 끝나지 않는다. - H(J)가 거짓이라면 J는 끝나지 않는다는 뜻이지만 J는 return문에 의해 끝나게 된다. 따라서 이는 모순이다. 2023. 4. 28.
빅 엔디안과 리틀 엔디안을 직접 확인해보자 메모리는 바이트 단위로 주소를 할당하고 저장한다. 다만 CPU 아키텍쳐마다 바이트를 저장하는 순서가 다르고 이를 빅 엔디언과 리틀 엔디언이라는 명칭으로 구분하고 있다. 빅 엔디언은 큰 자릿수부터 저장하는 것으로, 우리가 평소 16진수를 읽는 순서와 동일하다. 그리고 리틀 엔디언은 그 반대로 이해할 수 있다. 왜 방식이 나뉘었는지를 논하자면 여러 이유가 있겠으나, 나는 간단히 빅 엔디언은 사람이 다루기 쉽고 리틀 엔디언은 머신이 다루기 쉽기 때문으로 이해하고 있다. 위 사진처럼 0x12345678을 저장하는 경우, 빅 엔디안은 읽는 순서 그대로 저장되므로 사람이 다루기가 쉽다. 그러나 리틀 엔디안은 오른쪽부터 읽어야하므로 조금 불편하게 느껴진다. 그래도 머신 입장에서는 리틀 엔디안과 같은 형태가 가산 등의.. 2023. 2. 4.
부동소수점의 정밀도 문제에 대하여 부동소수점이란, 임의의 실수를 가수부와 지수부로 나누어 표현하는 방법이다. 소수점이 떠다니듯 움직여서 부동(浮動, float)이라고 하는데, 예를 들어 1.23 * 10^2과 12.3 * 10^1이 동일한 값을 나타내듯 소수점의 위치를 임의로 조정할 수 있기 때문에 붙여진 이름으로 추측된다. 부동소수점은 컴퓨터가 실수를 근사하여 표현하는 데에 사용된다. float 자료형의 경우, 국제 표준인 IEEE 754에 의거하여 부호 1비트, 지수 8비트, 가수 23비트로 총 32비트를 사용하는데, 여기서 지수는 bias = 127을 더함으로써 0~255의 범위가 아닌 -127~128의 범위를 가진다. 이에 float의 크기는 대략 2^-127 ~ 2^128, 즉 10^-38 ~ 10^38으로 굉장히 넓은 범위를 .. 2022. 10. 28.