파이썬 숫자형 이해하기

파이썬 숫자형 이해하기

숫자형(Numbers)

파이썬은 정수, 부동소수점, 복소수, 총 세 가지의 내장된 숫자형 자료형을 가진다.


정수(Integer)

정수는 소수점이 없는 수이다. 예를 들어 1은 정수이지만, 1.0은 아니다. type() 함수를 사용하면 정수 자료형은 int로 나타나는 것을 확인할 수 있다.

>>> type(1)
<class 'int'>

정수는 숫자를 입력하거나 int() 함수를 사용해 생성할 수 있다. 다음 예제는 문자열 "25"를 정수 25로 바꿔준다.

>>> int("25")
25

정수 리터럴(integer literal)은 코드 안에서 명시적으로 기록된 정수 값이다. 예를 들어 숫자 1은 정수 리터럴이지만, int("1")은 아니다.

정수 리터럴은 다음과 같이 다른 두 가지 방법으로 사용될 수 있다.

>>> 1000000
1000000

>>> 1_000_000
1000000

첫 번째 숫자는 매우 직접적이다. 숫자 1과 뒤에 0이 따라오는 수이다. 이런 식의 숫자 표기는 숫자가 커질수록 읽기 어렵다는 점이다. 만약, 큰 숫자를 사용해야 할 때 세 자리 수 마다 콤마로 구분해 준다면 훨씬 읽기 쉬울 것이다.

하지만 파이썬에서는 정수 리터럴 안에 자리 수를 무리짓기위해 콤마를 사용할 수 없다. 대신, 위 예제에서 처럼 밑줄(underscore)을 사용해서 1_000_000 같이 100만이란 숫자를 조금 더 가독성있게 사용할 수 있다.


부동소수점(Floating-Point Numbers)

부동소수점(floating-point number)은 소수점이 있는 숫자 형태를 말한다. 1.0-2.75 같은 숫자들이 부동 소수점이다. 부동소수점 자료형의 이름은 float이다.

>>> type(1.0)
<class 'float'>

부동소수점은 숫자로 직접 입력하거나 float() 함수를 사용해 생성할 수 있다. int() 함수와 마찬가지로 숫자를 포함한 문자열은 부동소수점 형태로 전환할 수 있다.

>>> float("1.25")
1.25

부동소수점 리터럴(floating-point literal)은 코드 안에서 명시적으로 기록된 부동소수점 값이다. 예를 들어 숫자 1.25은 부동소수점 리터럴이지만, float("1.25")은 아니다. 부동소수점 리터럴은 총 세 가지의 다른 방법으로 생성될 수 있는데, 100만이란 숫자로 비교한 다음 예제를 확인해보자.

>>> 1000000.0
1000000.0

>>> 1_000_000.0
1000000.0

>>> 1e6
1000000.0

처음 두 예제는 정수 리터럴을 생성 했을 때 사용한 방법과 비슷하다. 밑줄을 사용하는 두 번째 방식은 여러 자리 수를 가진 부동소소점을 생성할 때 아주 유용하다.

정말로 큰 숫자를 다룰때는 지수표기법(E-notation)을 사용할 수 있다. 세 번째 예제가 바로 지수표기법을 사용한 예제이다.

부동소수점 리터럴을 지수표기법으로 작성하기 위해서는, 숫자 뒤에 문자 e와 다른 숫자를 입력하면 된다. 파이썬은 e의 왼쪽에 있는 숫자를 e 다음에 오는 숫자의 거듭제곱으로 10을 곱한다. 그러므로 1e61×10⁶과 동등하다.

지수표기법(E-notation)Exponential Notation의 줄임말이다. 지수표기법이란 용어는 큰 숫자를 표기하는 계산기나 프로그래밍 언어에서 큰 숫자를 나타내기 위해 사용되는 이름이다.

또한, 파이썬에서는 큰 부동 소수점 수를 표현하기 위해 지수표기법을 사용하기도한다.

>>> 200000000000000000.0
2e+17

소수 200000000000000000.02e+17로 표시되었다. + 사인은 지수 17이 양수라고 나타낸 것인데, 즉, 음수인 지수를 사용도 가능하다.

>>> 1e-4
0.0001

부동 소수점은 정수와는 달리 최대 크기가 존재한다. 최대 부동소수점은 각자의 시스템에 따라 다르겠지만, 2e400과 같은 수는 대부분의 기계의 능력치를 훨씬 뛰어넘을 것이다. 왜냐면 2e400, 곧 2×10⁴⁰⁰란 수는 우주의 총 원자수보다도 훨씬 큰  수이기 때문이다. 이렇게 부동소수점의 최대치에 도달하면 파이썬은 inf을 반환한다.

>>> 2e400
inf

inf무한대(infinity)를 뜻하는데, 즉, 생성하려는 숫자가 컴퓨터의 최대치를 훨씬 뛰어넘었다는 뜻이다. inf의 형태는 여전히 float이다.

>>> n = 2e400
>>> n
inf
>>> type(n)
<class 'float'>

-inf 역시 또한 존재하는데, 음수로 무한하다는 뜻이다.

>>> -2e400
-inf

Reference