Project Hub

숫자 본문

Python/기초 개념

숫자

safy 2022. 10. 3. 18:12
728x90
반응형

파이썬 자료구조와 알고리즘 책 내용을 정리

 

1.1 정수

  • int 로 나타냄.
  • 불변형 (immutable)
  • 정수의 크기는 컴퓨터의 메모리 크기에 의해 제한된다.
  • 적어도 32비트
  • 정수를 나타내는 데 필요한 바이트 수 확인 (3.1 이상) : (정수).bit_length()
  • 문자열을 정수로 변환하거나, 다른 진법의 문자열을 특정 진법의 정수로 변환할 때 int(문자열, 진법) 메서드를 사용

 

1.2 부동소수점

  • float 로 나타냄.
  • 불변형 (immutable)
  • 단정도 방식과 배정도 방식 존재
    • 단정도
      • 1 비트는 부호 비트
      • 23 비트는 유효 숫자 자리수
      • 8 비트는 지수 (2^7 - 1)
    •  배정도
      • 1 비트는 부호 비트
      • 52 비트는 유효 숫자 자리수
      • 11 비트는 지수   (2^10 - 1) 
  • 단정도 표현 예
-118.625 를 32 비트 단정도로 표현
118 % 2 = 59 ... (0)
 59 % 2 = 29 ... (1)
 29 % 2 = 14 ... (1)
 14 % 2 =  7 ... (0)
  7 % 2 =  3 ... (1)
  3 % 2 =  (1) ... (1)
 
 0.625 * 2 = 1.250
 0.250 * 2 = 0.500
 0.500 * 2 = 1.000

=> 1110110.101
=> 1.110110101 * 2^6

부호비트: 1
가수비트: 11011010100000000000000
지수비트: 6 + 127 = 133 = 10000101

=> 1 10000101 11011010100000000000000

1.2.1 부동소수점끼리 비교하기

  • 부동소수점은 이진수 분수로 표현됨
  • 함부로 비교하거나 빼연 안된다.
  • 예상과 다른 결과를 반환하는 예
0.2 * 3 == 0.6      False
1.2 - 0.2 == 1.0    True
1.2 - 0.1 == 1.1    False
0.1 * 0.1 == 0.01   False
  • 동등성 테스트는 사전에 정의된 정밀도 범위 내에서 수행되어야 한다.
  • 부동소수점 비교 함수
def a(x, y, places = 7):
return round(abs(x-y), places) == 0

'''
abs(): 절댓값
round(x, n): n이 음수인 경우, x를 정수 n번째 자리에서 반올림 한 값을 반환
             n이 양수인 경우, x를 소수점 이하 n번째 자리로 반올림한 값을 반환
'''

 

1.2.2 정수와 부동소수점 메서드

  • 나누기 연산자 '/' 는 항상 부동소수점을 반환함.
  • '//' 연산사를 사용하면 정수를 반환할 수 있다.
  • divmod(x, y) 메서드는 x를 y로 나눌 때, 몫과 나머지를 반환한다.

 

1.3 복소수

  • z = 3 + 4j 와 같이 생긴 부동소수점 한 쌍을 갖는 불변형
  • z.real: 실수부
  • z.imag: 허수부
  • z.conjugate(): 켤레 복소수 구함
  • 복소수를 사용하려면 cmath 모듈을 임포트해야 함.

1.4 fraction 모듈

  • 분수를 다루기 위해서 사용
from fractions import Fraction

# as_integer_ratio() 함수를 통해 분수 형태의 값을 분수 모양으로 반환
def float_to_fractions(number):
    return Fraction(*number.as_integer_ratio())

# 분모 반환
def get_denominator(number1, number2):
    result = Fraction(number1, number2)
    return result.denominator

# 분자 반환
def get_numerator(number1, number2):
    result = Fraction(number1, number2)
    return result.numerator

 

1.5 decimal 모듈

  • 정확한 10 진법의 부동소수점 숫자가 필요한 경우 부동소수점 불변 타입인 decimal.Decimal 사용 할 수 있다.
  • Decimal() 메서드는 정수 또는 문자열을 인수로 취함.
  • 이 모듈은 부동소수점의 반올림, 비교, 뺄셈 등에서 나타나는 문제를 효율적으로 처리 가능.
print(sum(0.1 for i in range(10)) == 10)
=> False

from decimal import Decimal
print(sum(Decimal("0.1") for i in range(10)) == Decimal("1.0"))
=> True

 

1.6 2진수, 8진수 16진수

  • bin(i): 정수 i의 2진수 문자열을 반환.
  • oct(i): 정수 i의 8진수 문자열을 반환.
  • hex(i): 정수 i의 16진수 문자열을 반환.
728x90
반응형

'Python > 기초 개념' 카테고리의 다른 글

문자열 패킹과 언패킹  (0) 2022.10.14
문자열  (0) 2022.10.14
얕은 복사와 깊은 복사  (0) 2022.10.14
mutable object & immutable object  (0) 2022.08.15
Comments