01. 실수 표현 (고정 소수점과 부동 소수점)

2025. 3. 31. 11:06·프로그래밍 언어/C

✅ 고정 소수점 (Fixed-Point)

소수점의 위치를 고정시켜 실수를 표현하는 방식이다.


🧩 구조 (32비트 기준)

32비트 기준 고정 소수점은 다음과 같이 비트를 사용하여 표현한다:

  • 1비트: 부호
  • 15비트: 정수부
  • 16비트: 소수부

💡 예시: 9.6875의 표현

9.6875 → 0000 0000 0000 1001.1011 0000 0000 0000

소수부 변환 과정 (2진수로 * 2 반복):

0.6875 * 2 = 1.375 → 1
0.375  * 2 = 0.75  → 0
0.75   * 2 = 1.5   → 1
0.5    * 2 = 1.0   → 1

→ 소수부: 0.1011

 


✅ 장단점

장점 단점
계산이 간단 (고정 포맷) 정밀도/표현 범위가 좁음
하드웨어 구현이 쉬움 오차가 빠르게 커질 수 있음

 


✅ 부동 소수점 (Floating-Point)

고정 소수점보다 더 넓은 범위와 정밀도를 표현할 수 있도록 설계된 실수 표현 방식이다.

 


🔸 정규화(Normalization)

실수의 가수부를 1.xxxx 형태로 정규화하고, 지수부를 통해 자릿수 이동을 표현하는 과정이다.


🔹 예시 (2진수 정규화)

-11.4₁₀ → -1011.0110 0110 0110…₂
        → -1.01101100110… × 2³

🧮 IEEE 754 표준 구조 (단정도, 32비트)

구성 비트 수 설명
부호 (Sign) 1비트 양수: 0 / 음수: 1
지수 (Exponent) 8비트 Bias: 127
가수 (Mantissa) 23비트 앞의 1은 생략 (암묵적 1)

 

이때, 지수 값 0과 255는 비정규화 수/특수값(NaN, ±∞)에 사용된다.

실제 유효 지수 범위: 1~254 → 실제 지수: -126 ~ +127


📌 예시: -11.4를 IEEE 754 단정도로 표현

  1. 정규화: 1.0110110011… × 2³
  2. 부호 비트: 1
  3. 지수 비트: 3 + 127 = 130 → 10000010₂
  4. 가수 비트: 01101100110011001100110 (23비트로 자름)

✅ 최종 결과:

1 10000010 01101100110011001100110
→ 11000001 00110110 01100110 01100110

📏 배정도(Double-Precision, 64비트)

항목 설명
부호 비트 1비트
지수 비트 11비트 (Bias: 1023)
가수 비트 52비트

⚠️  실수 비교 시 주의

부동 소수점은 근사값이기 때문에, 다음과 같은 비교는 정확하지 않다:

if (a == b) { ... }  // 부정확!

✔ 권장 방식

if (fabs(a - b) < 1e-6) { ... }  // 오차 범위 내 비교

✅ 고정 vs 부동 소수점 비교

항목 고정 소수점 부동 소수점
계산 속도 빠름 상대적으로 느림
표현 범위 좁음 넓음
정밀도 낮음 높음
하드웨어 구현 간단 복잡
사용 예 임베디드, DSP 일반적 실수 계산, 과학 연산

🔗 참고

https://t.hi098123.com/IEEE-754

'프로그래밍 언어 > C' 카테고리의 다른 글

06. 구조체 (Struct)  (0) 2025.06.30
05. 함수 포인터 (Function pointer)와 void 포인터  (0) 2025.06.27
04. 포인터와 문자열  (2) 2025.06.26
03. 자료형 변환 (Type casting)  (0) 2025.06.24
02. 상수(Constant)  (0) 2025.03.31
'프로그래밍 언어/C' 카테고리의 다른 글
  • 05. 함수 포인터 (Function pointer)와 void 포인터
  • 04. 포인터와 문자열
  • 03. 자료형 변환 (Type casting)
  • 02. 상수(Constant)
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어 N
        • C N
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    jump table
    collision
    fluid implicit particle
    Flip
    물리 기반 시뮬레이션
    정수 승격
    실수
    pbd
    RAM
    액체 시뮬레이션
    유체 시뮬레이션
    시스템 프로그래밍
    C언어
    wave simulation
    GLSL
    그리드 기반 방법
    명령어
    OpenGL
    screen space fluid rendering
    fluid simulation
    파동 난류
    position based dynamics
    screen-space rendering
    surface turbulence
    상수
    narrow range filter screen-space fluid rendering
    cloth simulation
    bilateral blur
    입자 기반 방법
    컴퓨터 구조
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
01. 실수 표현 (고정 소수점과 부동 소수점)
글쓰기
상단으로

티스토리툴바