본문 바로가기
Golang/Study

chapter3(5) primitive type - float and complex

by 윤원용 2022. 2. 1.

본인은 이 실수를 실무에서도 많이 사용하지도 않았고 알고리즘 문제를 풀 때만 가끔 반환 타입으로 쓴 경우 말곤 없어 깊이 공부해보려 했지만.... borrow를 공부하면서 포기를 했다....ㅠㅠ 그래서 이번엔 가볍게 java와의 차이랑 책에 나와있는 몇 개의 예제만 포스트 하려고 한다. (complex는 들어 보지도 못했다... ㄷㄷ)

 

float

Go는 float32와 float64라는 실수 자료형을 지원하고 있다. Go 역시 Java와 c#과 같이 IEEE-754 표준을 따르고 있고 float32는 단정도(single-precision), float64는 배정도(Double-precision) 부동소수점형 실수를 저장한다 책에 나와있다.

float32와 float64의 차이는 정밀도라 생각하면 된다.

 

정수 타입들과 달리 실수 타입들은 운영체제에 의존하는 타입을 지원하지 않는다.  정수 타입엔 int, uint 타입이 존재하지만 실수 타입엔 float 타입이 존재하지 않는다.

띠로리~


책을 읽다 보면 그 이유를 조금? 설명하는데 Go는 32bit 운영체제든 64bit 운영체제든 float64를 기준으로 지원한다고 쓰여있어서  "뭐지?"라고 생각이 들었지만 왜 인지는 안 나와있다;; (32bit와 64bit에서도 똑같이 동작한다 하니.. 뭐..)

위와 같은 이유로 묵서적 선언 시 실수의 기본 타입은 float64이다. float32를 쓰고 싶으면 무조건 명시적 선언이나  typecasting을 해야 사용할 수 있다.

 

Java와 Go랑 다른 부분이 몇 가지 있는데 이제 차이점을 기준으로 진행하겠다.

Go에서 조금 이상한 부분이 있었는데 MIN_VALUE와 같은 상수를 지원하지 않고 SmallestNonzeroFloat32~64와 같은 이름의 상수를 지원한다. 이 부분에서 조금 이상한 부분이 있었지만 넘어가겠다.

 

실수 자료형은 java든 go든 연산이 불가능한 특수한 값도 가질 수 있는데 NaN과 +Inf, -Inf가 있다. NaN은 0.0 / 0.0을 하면 NaN(Not A Number)이 출력되고 1.0 / 0.0으로 나누면 +Inf, -1.0 / 0.0으로 나누면 -Inf가 나온다 java에서는 NaN은 같지만 +Inf를 Infinity으로 -Inf를 -Infinity로 표현한다.

 

책에서는 실수의 정밀도를 설명하는 부분이 있는데 정확하게 나와있지 않아 Pass....  (github에 예제 코드는 올렸다.)실수를 정수로 변경 시 음수나 양수 상관없이 실수 부분은 0으로 처리된다. 

 

complex

Java 1.8 version엔 complex와 같은 타입이 없다. 사용하려면 외부 라이브러리를 사용해야 한다. Go는 complex 타입을 지원하는데 복소수를 표현하는 자료형이라 한다. complex64와 complex128이라는 keyword로 complex는 실수부(real Number)와 허수부(imaginary Number)로 나뉜다. complex64는 float32로 실수, 허수부를 표현하고 complex128은 float64로 실수, 허수부를 표현한다.

묵시적으로 변수 선언 시 1.0 + 3i 이런 식으로 값을 설정하면 complex128로 설정되고 내장 함수인 complex를 사용하여 complex(1.0, 3) 이런 식으로 변수를 선언하면 complex128 type으로 1.0 + 3i 값을 갖는 변수를 선언한다. 묵시적 변수 선언 시 실수 값 뒤에 i를 붙이면 complex type으로 타입 추론하는 것 같다. 책에도 예제는 별로 없어서 마지막으로 complex type과 관련된 함수 두 개를 소개하고 끝내겠다. complex type의 변수에 실수 또는 허수만 추출하는 내장 함수가 있는데 실수는 real(), 허수는 imag()이다. 

 

 

오늘은 엄청 얕게 포스트 한 거 같다. 그 이유는 실무에서 실수를 사용한 적도 별로 없고 본인에겐 엄청 어려운 내용인 것 같다. 실무에서 과연 complex type을 쓸 상황이 있을까??...?? 다음은 rune과 string에 대해 포스트하겠다. ㅎㅎ