Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Cleancode
- 종만북
- 생활코딩
- Algospot
- udemy
- 백준
- C언어
- graph
- DP
- BASIC
- dfs
- Python
- JavaScript
- BOJ
- BFS
- 인프런
- 정수론
- programmers
- php
- Math
- 따배씨
- C
- server
- 따라하며 배우는 C언어
- greedy
- Algorithm
- sorting
- web
- String
- 따라하면서 배우는 C언어
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 3.11 부동소수점형 본문
따배씨 - 따라하며 배우는 C언어
3강 데이터와 C 언어
3.11 부동소수점형
- 과학적 표기법 Scientific Notations
- m X 10^n
- m: significand
- n: exponent
- 123.45 = 12345 X 10^-2 = 1.2345 X 10^2
- 유효숫자 5개: 1.2345 X 10^2
- 유효숫자 6개: 1.23450 X 10^2
- m X 10^n
- 4 byte (32 bit) 부동소수점수
- sign + exponent (8 bits) + fraction (23 bits)
- sign: 31번째
- exponent: 23~30번째
- fraction: 0~22번째 ; Sgnificand 중에서 소수점 아래 부분
- 0.15625 = 0b0111110001000000000000000000000
- (+1) X 2^(124-127) X (1 + 2^-2)= +0.15625
- = +0.125 X 1.25
- sign + exponent (8 bits) + fraction (23 bits)
- 범위 비교
- 4 byte 정수 범위
- -2,147,438,648 ~ 2,147,438,647
- 대략 -2.14 X 10^9 ~ 2.14 X 10^9
- 4 byte 부동 소수점수 범위
- 대략 -3.4 X 10^38 ~ 3.4 X 10^38
- 10진수 유효숫자 6개 - 정확도를 보장 할 수 있는 자리수가 6개
- 4 byte 정수 범위
#include <stdio.h>
#include <float.h>
int main()
{
printf("%u \n", sizeof(float));
printf("%u \n", sizeof(double));
printf("%u \n", sizeof(long double));
float f = 123.456f;
double d = 123.456;
float f2 = 123.456;
double d2 = 123.456f;
int i = 3;
float f3 = 3.f; // 3.0f
double d3 = 3; // 3.0
float f4 = 1.234e10f;
float f5 = 0xb.aP1;
double d5 = 1.0625e0;
printf("%f %F %e %E\n", f, f, f, f);
printf("%f %F %e %E\n", d, d, d, d);
// %f, %F: 실수 출력 // %e, %E: 과학적 표기법 출력
printf("%a %A\n", f5, f5);
printf("%a %A\n", d5, d5);
// %a, %A: 16진수 출력
return 0;
}
- long double
- long double 은 windows 에서 8byte, 64bit Linux, OS X 에서는 16byte
- float f = 123.456f;
- float 형은 literal f 를 붙여주는게 좋다
- double d = 123.456;
- double 형은 기본형이라서 literal 이 붙이 않아도 됨
- float f2 = 123.456;
- 8byte 메모리의 double 을 float 에 대입하므로 정밀도 문제로 warning 발생
- 1.234e10f == 1.234 X 10^10 - 과학적 표기법
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 3.13 불리언형 ~ 3.14 복소수형 (0) | 2021.05.11 |
---|---|
[따배씨] 3.12 부동소수점형의 한계 (0) | 2021.05.11 |
[따배씨] 3.10 문자형 (0) | 2021.05.11 |
[따배씨] 3.9 이식성이 높은 고정 너비 정수 (0) | 2021.05.11 |
[따배씨] 3.8 8진수와 16진수 (0) | 2021.05.10 |
Comments