• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

float 값의 비교 (== 연산자는 위험하다!)

Programming/기타 etc. 2021. 4. 13. 11:29




일반적으로 값의 같음을 비교할떄 == 비교연산자를 사용한다.

 

실수 값의 비교에서도 아무생각없이 사용하는 경우가 많은데

실수의 같음 비교에 == 를 사용하는것은 매우 위험할 수 있다.

 

이는 float, double 과 같은 실수형 자료는 부동소수점 형태로 구현되어있어 발생하는 문제이다.

 

상식적으로는 0.1 + 0.2 == 0.3 이 수식이 틀릴 리 없는 숫자이지만

프로그램 관점에서는 값이 다를수 있다.

저 소수점 한참 아래의 오차값이 발생하기 때문이다.

 

이러한 문제를 해결하기위한 실수 비교 방법은 두가지가 있다.

 

1. 두 값의 차이를 이용한 방법

단순 비교연산자로 비교하는 방법이 아닌 두 값의 차이가 특정값(입실론으로 표현함) 이하일 경우 같은수로 판단

부동 소수점 표현의 특성상 나타나는 오차는 매우 작은 값을 가지므로 두 값의 차이가 매우 작은 값 이하라면

두 값은 같은 값이라 판단할 수 있다. 

이러한 기준이 되는 입실론의 크기는 사용하는 언어에 따라 각각 정의되어 있다.

단, 값의 대소관계를 모르기 떄문에 절대값을 취한뒤 크기를 비교한다.

 

 

2. decimal 형변환을 통한 비교

실수값을 decimal 로 형변환을 수행하면 고정소수점 방식으로 계산되어 오차를 개선할 수 있다.

이는 사용하는 언어에 따라 다를 수 있다.

 

 

이 외에도 fsum, round 등의 방법을 이용하여 보완할 수는 있지만 이들은 이들 나름의 문제점을 가지고 있어서

사용시 주의해야 한다.

 

 

사람의 기준에서는 오류가 없는 방법이지만

언젠가 크게 뒤통수 맞을 수 있는 위험을 가지고 있으니 기억해 두고 습관화 하는게 좋을것 같다.

저작자표시 (새창열림)

'Programming > 기타 etc.' 카테고리의 다른 글

[Git] github -> gitlab / repository를 이사하자  (0) 2021.12.06
[ROS] Rosbag2Video  (0) 2021.11.30
google drive web client 사용량 제한  (0) 2021.02.25
pycharm 사용 및 환경설정 팁  (0) 2019.03.18
폴더 내의 파일목록을 다뤄보자. 폴더 내 파일 리스트 만들기  (0) 2015.12.17
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

카테고리

  • 살다보니.. (449)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (147)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (58)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (8)
    • 전공관련 (80)
      • Algorithm (6)
      • Deep Learning (54)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (8)
    • Computer (118)
      • Utility (21)
      • Windows (31)
      • Mac (4)
      • Ubuntu, Linux (58)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • matlab
  • utility
  • function
  • 갤럭시노트3
  • 일본
  • portugal
  • SVM
  • Deep Learning
  • DSLR
  • 크롬
  • CStdioFile
  • Convolutional Neural Networks
  • 매트랩 함수
  • ColorMeRad
  • random variable
  • 스마트체험단
  • review
  • 포르투갈
  • 매트랩
  • DeepLearning
  • 후쿠오카
  • 칼로리 대폭발
  • LIBSVM
  • ReadString
  • Computer Tip
  • 딥러닝
  • 에누리닷컴
  • 오봉자싸롱
  • matlab function
  • 큐슈

달력

«   2025/06   »
일 월 화 수 목 금 토
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
06-20 08:17

LATEST FROM OUR BLOG

RSS 구독하기

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바