250x250
반응형
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 | 31 |
Tags
- airflow subdag
- login crawling
- youtube data
- subdag
- session 유지
- 공분산
- TensorFlow
- XAI
- Retry
- correlation
- GCP
- API Gateway
- 상관관계
- UDF
- 유튜브 API
- spark udf
- top_k
- integrated gradient
- gather_nd
- hadoop
- grad-cam
- Airflow
- GenericGBQException
- requests
- flask
- API
- Counterfactual Explanations
- BigQuery
- tensorflow text
- chatGPT
Archives
- Today
- Total
데이터과학 삼학년
부동소수점(0.1+0.2 != 0.3 ???) 본문
반응형
파이썬에서는 실수를 표현하는 방법으로 부동소수점을 쓴다.
>> 간단히 말해 0.1이 진짜 0.1이 아니다.
0.1 + 0.2
# 0.30000000000000004
파이썬의 0.1은 실제로 아래와 같이 0.1이 아닌 0.1에 가까운 값을 나타낸다.
0.1000000000000000055511151231257827021181583404541015625
따라서 0.1+02 = 0.3이 아니게 됨...(실제)
이렇기 때문에 계산할때 특히 금융데이터에서 유의해야함.
부동소수점 연산의 정확성 유지하기
부동소수점 연산에서 주의해야 할 몇 가지 일반적인 문제는 반올림 오차와 비교 연산의 부정확성
이를 방지하기 위해 파이썬에서는 Decimal
모듈을 제공
Decimal
모듈은 고정 소수점 연산을 수행하며, 정확한 결과를 얻을 수 있도록 도와줌
from decimal import Decimal
num1 = Decimal('0.1') num2 = Decimal('0.2') result = num1 + num2 print(result)
# 출력: 0.3
반응형
부동소수점 비교 주의사항
부동소수점을 비교할 때는 정확한 결과를 얻기 위해 동등성 비교 대신 오차 범위를 사용해야 함. 이
를 위해 math
모듈의 isclose()
함수나 numpy
의 isclose()
함수를 사용
이 함수들은 두 부동소수점 값이 일정한 오차 범위 내에 있는지를 확인하여 정확한 비교를 수행
import math
num1 = 0.1 + 0.2
num2 = 0.3
if math.isclose(num1, num2):
print("두 값은 동일합니다.")
부동소수점 값을 문자열로 변환하기
부동소수점 값을 문자열로 변환할 때도 주의가 필요
파이썬은 기본적으로 부동소수점 값을 반올림하여 문자열로 변환
따라서 원하는 정확도를 유지하기 위해 문자열 변환 시 소수점 자리수를 명시적으로 지정하는 것이 좋음
num = 3.141592653589793
formatted_num = "{:.2f}".format(num)
print(formatted_num)
# 출력: "3.14"
부동소수점 사용 시 주의사항
부동소수점은 정확성이 한정되어 있으므로 금융 데이터와 같이 정밀한 계산에 사용하기에는 적합하지 않음
이런 경우에는 Decimal
모듈을 사용하거나 정수 연산을 고려하는 것이 좋음
참조
728x90
반응형
LIST
'Python' 카테고리의 다른 글
[디자인 패턴] Singleton 싱글턴 패턴 (0) | 2023.12.09 |
---|---|
어트리뷰트 (Attribute), 프로퍼티 (Property), 디스크립터 (Descriptor) (0) | 2023.08.30 |
SOLID-python 원칙 : clean code (0) | 2023.07.05 |
* VS ** 차이 (리스트 or 딕셔너리 풀어낼때) (0) | 2023.05.05 |
[파이썬 클린코드] Chapter1. 코드 포매팅과 도구 (0) | 2023.01.15 |
Comments