etc

[Python] 숫자 자료형 (정수 int, 실수 float, 복소수 complex)

조부장 2020. 9. 23. 15:14

(파이썬 버전: 3.8.2)

파이썬 내장 자료형(builtin type) 중 숫자 자료형에 대해 알아보겠습니다. 파이썬에는 세 가지 숫자형이 있는데 정수, 실수, 복소수입니다. 파이썬에서 논리형(bool)은 정수의 하위 유형으로 정의되어 있습니다.

각 숫자형의 자세한 정보를 알아보겠습니다.

Python 숫자 자료형 정수int 실수 float 복소수 complex

 

숫자 연산

복소수를 제외한 모든 숫자형은 아래와 같은 연산을 지원합니다.

연산 설명
x + y x와 y의 합
x - y x와 y의 차
x * y x와 y의 곱
x / y x와 y의 나눗셈
x // y x와 y의 정수 나눗셈
x % y x / y의 나머지
-x 음의 x
+x x 그대로
abs(x) x의 절댓값
int(x) 정수로 변환된 x
float(x) 실수로 변환된 x
complex(real, imag) real + imag*1j 값을 갖는 복소수
c.conjugate() 복소수 c의 켤레
divmod(x, y) (x//y, x%y)의 튜플
pow(x, y) 또는 x**y x의 y 거듭제곱

추가적인 연산은 math, cmath 모듈을 확인하세요

 

정수 (int)

파이썬에서 정수형은 부호가 있는(signed) 정수형이고, 파이썬 3에서 정수형의 정밀도는 무제한입니다. Java의 BigInteger 생각하시면 됩니다.

C++에서는 int 타입의 크기가 4바이트로 [-(2^31), (2^31)-1]의 범위 제한이 있습니다. 2의 보수(2's complement)를 사용해 정수형을 표현하기 때문인데 이 범위를 넘어가면 오버플로우가 발생하게 됩니다. 파이썬은 기본적으로 임의정밀도를 적용한 정수형을 사용합니다.

class int([x])
class int(x, base=10)

정수객체는 위처럼 만들 수 있는데 base로 진법을 설정할 수 있고 x는 문자열도 올 수 있습니다.

 

논리형 (bool)

논리형은 정수의 하위 유형입니다. True, False 두 상수 객체인데요, 대문자로 시작한다는 점을 참고해주세요.

>>> bool([1, 2, 3])
True

>>> bool(0)
False

bool(x)로 논리값 검사를 할 수 있는데, 기본적으로 객체는 False를 반환하는 __bool__() 메서드나 0을 반환하는 __len__() 메서드가 정의되어 있지 않으면 True를 반환합니다. 아래 항목에 대해서 False 값이 반환됩니다.

  • None, False
  • 숫자 형들의 영: 0, 0.0, 0j, Decimal(0), Fraction(0, x) 등
  • 빈 시퀀스, 컬렉션: '', (), [], {}, set(), range(0) 등

 

실수 (float)

>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

실수형은 보통 C의 double을 사용해 구현되는데 sys.float_info를 확인해 정밀도 정보를 확인할 수 있습니다.

class float([x])

sign ::= "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::= floatnumber | infinity | nan
numeric_string ::= [sign] numeric_value

숫자 또는 문자열로부터 실수를 만들 수 있는데, 이때 문자열의 문법은 위와 같아야 합니다.

>>> float('+1.23')
1.23

>>> float('   -12345\n')
-12345.0

>>> float('1e-003')
0.001

>>> float('+1E6')
1000000.0

>>> float('-Infinity')
-inf

예제는 위와 같습니다.

>>> int(5.1)
5

>>> 5.1 - int(5.1)
0.09999999999999964

>>> 5.1 % 1
0.09999999999999964

이런식으로 정수부와 소수부를 분리할 수 있는데 이때 실수 정밀도때문에 오차가 발생할 수 있는 점 참고해주세요.

 

복소수 (complex)

class complex([real, [, imag]])

위 함수로 real+imag*1j값을 가진 복소수를 만들거나 문자열에서 복소수를 만들 수 있습니다.

문자열에서 복소수를 변환할 때 +, - 연산자 주위 공백이 있으면 ValueError가 나오게 됩니다. 예를 들어 complex('1+2j')는 괜찮지만 complex('1 + 2j')는 ValueError가 발생합니다.

>>> a = complex(1+2j)
>>> a.real
1.0
>>> a.imag
2.0
>>> a
(1+2j)

real, imag로 실수부 허수부에 접근할 수 있습니다.

반응형