-
23.01.04 python format, map, bit shift 연산개발 이야기/TIL 2023. 1. 4. 22:17
#1 python format과 부동소수점
실수를 다룰 때 소수점 아래자리를 다루는 방법은 여러가지가 있다.
-1 round이용
문자 그대로 반올림을 하는 함수, 공식문서를 확인하면 다음과 같다(https://docs.python.org/ko/3/library/functions.html)
number 를 소수점 다음에 ndigits 정밀도로 반올림한 값을 돌려줍니다. ndigits 가 생략되거나 None 이면, 입력에 가장 가까운 정수를 돌려줍니다.
일반적인 파이썬 객체 number 의 경우, round 는 number.__round__ 에 위임합니다.
참고: float에 대한 round() 의 동작은 예상과 다를 수 있습니다: 예를 들어, round(2.675, 2) 는 2.68 대신에 2.67 을 제공합니다. 이것은 버그가 아닙니다: 대부분의 십진 소수가 float로 정확히 표현될 수 없다는 사실로부터 오는 결과입니다. 자세한 정보는 부동 소수점 산술: 문제점 및 한계 를 보세요.
여기서 포인트는 컴퓨터는 실수, 특히 소수를 정확히 표현할 수 없다는 것이다. 이에 따라서 round가 우리 예상과 다르게 반올림을 하지 않는 경우가 있다. 즉, round(0.5) => 0으로 표현될 수도 있다는 것이다!(실제로도 그렇다)
따라서 우리는 부동소수점 오류를 주의해야함을 여기서도 확인 가능하다.
(참조: https://stackoverflow.com/questions/455612/limiting-floats-to-two-decimal-points)
-2 format
format도 동일한 문제를 조금 더 깔끔하게 정리해준다. format(c, ".3f")라는 식으로 표현하고 이는 소수 3째자리까지 표기하라 라는 의미이다. round(c,3)로 하는 경우 부동소수점 때문에 우리가 원하는 결과가 나오지 않을 수도 있다.
#2 map
매우 편리한 함수이다. 형태는 map(function, iterable)이다.
나는 이번에 간단히 자료형을 바꾸어 줄때 사용하였다. (예시: a,b = map(int, input().split()))
#3 bit shift 연산 << >>
알다시피 컴퓨터에서는 bit로 값을 저장한다. 즉, 2진수를 사용한다. 그럼으로 우리가 bit를 왼쪽으로 한칸 옮기면 2를 곱하는 것이고 오른쪽으로 한칸 옮기면 나누는 것이다.
a<<b는 a를 b칸 왼쪽으로 옮긴다는 뜻이다. 이는 즉, a*(2**b)를 계산하겠다는 의미와 같다.
bit shift연산은 나중에 꽤나 많이 사용되기 때문에 미리 익숙해져있는 것이 좋을 것 같다(저번학기 자료구조 시간에 hash에서도 언급된 적있음)
'개발 이야기 > TIL' 카테고리의 다른 글
23.01.10 python list와 2차원 배열 (0) 2023.01.11 23.01.06 python 다양한 진수(2진수, 8진수, 16진수) 표현하기 (0) 2023.01.06 23.01.05 bit 단위 연산 ~(틸드)와 음수의 표현법, 아스키코드 (0) 2023.01.06 23.01.03 python for loop (1) 2023.01.04 23.01.02 python print (0) 2023.01.02