[Java] "float" vs "double" in precision

2024. 8. 31. 23:25·Java

어느정도의 토이프로젝트를 진행 할 수 있지만.. 기본개념없이 주먹구구식으로 Spring, Java, RDBMS(oracle)을 사용해 진행한 느낌이 심해 기초부터 다시 잡고자 Java 개념부터 다시 잡기 위해 김영한 강사님의 "코드로 시작하는 자바 첫걸음" 강의를 듣다 "실무에선 float 보단 double을 더 많이 사용한다. 정밀도에서 차이가 나기 때문이다"라는 말씀에 궁금증으로 찾아보게 되었다.

Variable (변수)

간단하게 프로그래밍에서 변수는 연관된 기호 이름과 쌍을 이루는 추상적인 저장 위치로, 알려지거나 알려지지 않은 데이터 또는 값으로 지칭되는 객체를 말한다.

https://en.wikipedia.org/wiki/Variable_(computer_science)#:~:text=In%20computer%20programming%2C%20a%20variable,data%20(like%20integer%2C%20float%2C

 

Variable (computer science) - Wikipedia

From Wikipedia, the free encyclopedia Named container for a particular type of data In computer programming, a variable is an abstract storage location paired with an associated symbolic name, which contains some known or unknown quantity of data or object

en.wikipedia.org

 

지금부터 계속 언급될 float과 double의 경우 실수형이며, 부동 소수점 방식이며 다음과 같은 특징을 갖는다.

1. 고정 소수점 방식보다 훨씬 더 많은 범위를 표현할 수 있다는 장점이 존재한다

2. 항상 오차가 존재한다는 단점이 존재한다.

 

다음은 float형과 double형의 범위와 크기이다.

아래의 표와 같이 float의 크기는 4byte(32bit)이고, double형의 경우 8byte(64bit)의 크기를 가진다.

 다음의 표를 가지고 나눠서 계속해서 얘기해보겠다.


float

 

float 타입의 경우 데이터 범위는 -3.4*10^-38 ~ 3.4*10^38의 범위를 가지며, 표현할 때 실수 리터럴 뒤에 f 또는 F를 붙여야 한다.

(붙이지 않을 경우  컴파일 에러가 발생한다.)

 

*리터럴 뒤에 f를 붙인 경우

*리터럴 뒤에 f를 붙이지 않은 경우

 

*실습

*결과

 

double

double 타입의 경우 데이터 범위는 -1.7*10^-308 ~ 1.7*10^308의 범위를 가지며, 범위만 두고 비교를 했을 때도 float형에 비해

압도적인 차이가 발생한다.

 

*실습

*결과

 

 


 

마무리

float와 double형의 경우 둘다 부동소수점 방식으로 공통점을 갖고 있으나. 표현할 수 있는 범위에서 차이가 발생하다 보니(거의 2배),

정밀도에서 float이 떨어질 수 밖에 없다.

이러한 부분에 대해 생각해봤을 때, 계산을 하는 등의 작업을 했을 때 float을 사용한다면, 표현의 정밀도가 떨어짐으로 인해 실제 값과의 오차율(%)이 double형에 비해서 높을 수 밖에 없어 실무에서도 float형을 상대적으로 덜 사용할 수 밖에 없다는 생각이 들었다.

물론, 정밀도가 떨어져도 상관없는 작업에 대해서는 float형을 사용해서 오버플로우를 방지하는 것도 방법이라곤 생각된다(그럴일은 없을 것 같지만..)

'Java' 카테고리의 다른 글

[Java] reverse()  (1) 2024.11.13
[Java] Thread Join  (2) 2024.11.12
[Java] Record  (4) 2024.11.11
[Java] What is NullPointException?  (0) 2024.09.24
[Java] Linear Search AND Binary Search  (2) 2024.09.03
'Java' 카테고리의 다른 글
  • [Java] Thread Join
  • [Java] Record
  • [Java] What is NullPointException?
  • [Java] Linear Search AND Binary Search
dev-heesxxung
dev-heesxxung
  • dev-heesxxung
    발악하는 비전공자 여우
    dev-heesxxung
  • 전체
    오늘
    어제
    • 분류 전체보기 (16)
      • Java (7)
      • Spring (1)
      • 밑시딥 (1)
      • Thesis (5)
      • AI (1)
      • Sparta[심화 2기] (1)
  • 블로그 메뉴

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

    • Github
  • 공지사항

  • 인기 글

  • 태그

    특징점 추출(feature detection)
    관심 영역 기반
    영상처리(image processing)
    ai
    컴퓨터비전
    어텐션기법
    Spring
    Thread
    NullPointException
    conjunctivitis
    Coding
    programming
    CS
    의료 영상 분석
    java
    템플릿 매칭(template matching)
    인식속도(recognition speed)
    실시간 객체인식(real-time object recognition)
    master student
    Computer Vision
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev-heesxxung
[Java] "float" vs "double" in precision
상단으로

티스토리툴바