실수는 정수 및 연속한 두 정수 사이의 모든 수를 의미
실수는 일반적으로 아래와 같은 과학적 표기법으로 나타냄
+ 6.13 * 10-2
컴퓨터에서 실수를 부동 소수점 수로 표현
실수 V는 다음과 같이 4개의 구성 요소를 사용하여 나타냄
V = (-1)s M RE
s는 부호, M은 가수, R은 기수, E는 지수
2를 기수로 사용하므로 기수를 제외한 나머지 구성 요소로 표현
| 부호비트 | 지수필드 | 가수필드 |
부동 소수점 표현 중에서 소수점 왼쪽에 있는 수를 0이 아닌 한 자리 수로 제한
2진법을 사용하는 정규화된 실수는 가수만 2진수로 표현하고, 나머지 지수와 기수는 아래 첨자가 없더라도 10진수로 표현
항상 1이라는 것은 이 정보를 가수 필드에 저장할 필요가 없음
그래도 유효해서 1을 잠복 비트라고 부른다고...하는 듯.?
실수를 위해 단일 정밀도(C언어에서 float)와 2배 정밀도(C언어에서 double)라는 두 가지 형식을 제공
단일 정밀도
V = (-1)s (1.M) 2E-127
C0C0000016
1 10000001 10000000000000000000000 이다.
1
부호 비트
지수 필드 10000001
가수 M 10000000000000000000000
잠복 비트 1.
추가
-> 1.100000000000000000000002
10진수로 표현하면 1.5
지수 E가 100000012 이므로 2(129-127)
따라서 단일 정밀도 표현을 10진법 실수로 나타내면 6.0(?)이다.
부호가 양이므로 부호 비트 s는 0
가수 3의 2진 표현은 112
정규화된 가수 표현은 1.12,
잠복 비트를 제거하면 0.12
따라서 가수 23비트 M은 100000000000000000000002
지수는 1010이지만 가수의 정규화 과정에서 오른쪽으로 1비트 시프트했기 때문에 이를 보정한다
따라서 지숫값은 1110이 되고, 127-초과 코드로 변환하면 138(11 + 127)이다
이를 8비트 2진수로 효현하면 100010102가 된다
0 10001010 10000000000000000000000
범위: 데이터를 표현할 수 있는 최댓값과 최솟값을 의미
정밀도: 두 개의 연속적인 값 사이의 거리를 의미
근사값과 실제값 간의 차이(?)
정수는 범위만 가지고, 부동 소수점 수는 범위와 정밀도 두 가지 특성을 가짐
지수와 가수의 상호 조정이 필요
고정된 길이의 부동 소수점 표현에서
지수 필드를 위한 비트 수를 증가시키면 표현 범위는 넓어지지만 정밀도가 떨어진다.
가수 필드를 위한 비트 수를 증가시키면 표현 범위는 좁아지지만 정밀도가 놓아진다.
V = (-1)s M RE
- s는 부호, M은 가수, R은 기수, E는 지수
IEEE-754 표준: 단일 정밀도, 2배 정밀도
오버플로우와 언더플로우
표현할 수 있는 최대 범위를 넘으면 오버플로우 발생
표현할 수 있는 최소 범위를 넘으면 언더플로우 발생
일반적으로 2개의 입력단자와 1개의 출력 단자
논리게이트는 기본 하드웨어 소자. 0 또는 1의 신호를 출력
(논리곱)AND 게이트 001 010 101 111
(논리합)OR 게이트 000 011 101 111
(논리 부정)NOT 게이트 01 10
(베타적 논리합)XOR 000 011 101 110
기억소자 유무에 따라 조합 논리회로와 순차 논리회로로 분류된다
XOR x, y -> s
AND x, y -> cout
x y s cout
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
피가수와 가수
연산자를 중간에 두고 왼쪽에 있는 수를 피가수, 오른쪽에 있는 수를 가수라고 한다.