같은 연산의 결과이다.1.2. Rounding
- 반올림
- 정확히 절반일 때는 LSB가 짝수가 되는 방향으로 한다.
- 모든 실수 연산의 마지막에 반드시 필요하다.
1.3. 곱셈
- $ (-1)^s M 2^E = (-1)^{s_1} M_1 2^{E_1} \times (-1)^{s_2} M_2 2^{E_2} $
s = s1 ^ s2
M = M1 * M2
E = E1 + E2
- 만약
M >= 2
이면 M을 오른쪽으로 한 칸 밀고, E를 1 더한다. - M을 round한다.
1.4. 덧셈
- $ (-1)^s M 2^E = (-1)^{s_1} M_1 2^{E_1} + (-1)^{s_2} M_2 2^{E_2} $
E = E1
under E_1 > E_2
.- s, M은 정렬된 덧셈으로부터 결정된다.
M >= 2
이면 M을 오른쪽으로 한 칸 밀고 E에 1 더한다.M < 1
이면 M을 1이 나올 때까지 k칸 밀고 E에 k를 뺀다.- 오버플로우 처리를 한다.
- M을 round한다.
2. C 실수
float
: single precision- 32bits : 1 sign, 8 exp, 23 frac
double
: double precision- 64 bits: 1 sign, 11 exp, 52 frac
2.1. 변환
double/float
에서 int
- 소수부 버림
- 0을 향한 어림
- NaN / infinity에 대해서는 일반적인 정의는 없다. 보통은
TMin
int
에서 double/float