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 |
Tags
- UICollectionView
- SWIFT
- 스위프트
- 클린 코드
- collectionview
- 리펙토링
- Clean Code
- Observable
- clean architecture
- UITextView
- Human interface guide
- 리펙터링
- uiscrollview
- swift documentation
- Xcode
- MVVM
- ios
- swiftUI
- RxCocoa
- map
- ribs
- HIG
- Protocol
- rxswift
- tableView
- combine
- Refactoring
- uitableview
- 리팩토링
- 애니메이션
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] swift에서의 Float과 Double (부동 소수점, floating point) 본문
iOS 응용 (swift)
[iOS - swift] swift에서의 Float과 Double (부동 소수점, floating point)
jake-kim 2023. 1. 21. 22:16Swift에서의 Float, Double
- 학부 시절에 배웠던 부동 수소점으로 swift에서 Float과 Double 표현
- Double은 Float보다 더욱 정밀하게 소수점을 표현
print(Double.pi) // 3.141592653589793
print(Float.pi) // 3.1415925
- 만약 0.1을 백번 더한다면 10.0이 안나오므로 주의
var float: Float = 0.0
(0..<100).forEach { _ in float += 0.1 }
print(float) // 10.000002
var double = 0.0
(0..<100).forEach { _ in double += 0.1 }
print(double) // 9.99999999999998
- 부동 소수점이란?
- IEEE에서 표준으로 소수점의 근사값을 구하기 쉽게 비트로 정의한 수 표현 방식
- 컴퓨터는 비트 단위로 표현해야 계산에 쉽기 때문에 비트로 표현
- (아래는 float 형 부동 소수점 방식)
- 표준은 총 32bit를 사용하여 숫자를 표현
- 첫번째 비트는 부호 비트 (0이면 양수, 1이면 음수)
- 지수는 정수부분를 의미하며 8비트 사용
- 가수는 소수부분을 의미하며 23비트 사용
- "지수"와 "가수"의 의미?
- 부동 소수점 방식은 아래와 같이 실수로 저장하며, 밑은 2를 가지는 형태
- 가수는 1.2345 숫자이고, 지수는 말 그대로 exponential를 의미
ex) 314.625를 부동 소수점으로 표현하면?
314.625의 가수부(소수) 구하기
1) 2진수로 표현
1 0011 1010.101(2)
2) 위에서 표현한 2진수의 숫자에 가장 왼쪽에 1만 남기고, 나머지 정수 부분을 소수부분으로 이동 (= 정규화 작업)
1 0011 1010.101(2) = 1.001 1101 0101(2)
3) 8개가 소수로 이동하였으니, 2^8만큼 이동했으므로 곱셈으로 표현
여기서 8은 `지수부`
1.001 1101 0101(2) = 1.001 1101 0101 * 2^8
4) 소수점의 오른쪽 부분 001 1101 0101을 부동 소수점에서의 가수부에 위치시키고 남은 12(=23-11)자리는 0으로 채워넣기
001 1101 0101 0000 0000 0000
314.625의 지수부 구하기
1) 3번에서 얻은 지수부 8을 사용하여, 지수 비트 부분을 표현
* 32bit에서의 지수 비트는 (2^8 - 1) + 지수부로 구성하기 때문에, 표현하면
127 + 8 = 135
즉, 지수비트 135 = 100000111(2)
- 결과
- 부호비트(1bit): 0 (양수)
- 지수비트(8bit): 10000111 (127 + 8 = 135)
- 가수 비트(23bit): 00000111010011001100110
* 참고
https://ko.wikipedia.org/wiki/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90
https://codetorial.net/articles/floating_point.html
'iOS 응용 (swift)' 카테고리의 다른 글
Comments