오늘 배운 것 중 부동소수점과 고정소수점이 있었는데 자세한 내용은 아래 잘 정리된 글이 있어서 Link를 건다.
프로그래밍 언어는 IEEE 754라는 국제표준에 따라 실수를 부동 소수점으로 표현한다. 파이썬의 경우 float가 그렇다. 예를 들어 234.54는 23454X10 ̄3으로 표현하고, 유효숫자e지수라는 방법으로 표현한다( 23454e-2).
문제는 부동소수점이 십진법으로는 간단히 표현되는데 컴퓨터가 이해해야 하는 2진수로 바꿀 때 무한 유효숫자를 가질 수 있게 되고 이로 인해 심각한 오류가 발생하게 된다. 예를 들어 십진수 0.1을 이진수로 나타내게 되면 0.000110011001100110011001100110011~로 무한반복되게 된다.
파이썬에서 십진수를 이진수로 바꾸는 명령어는 bin()이다.
링크에도 잘 나와 있지만 금융에서는 부동소수점을 사용하지 않는다고 한다. 이유는 부동소수점으로 무한반복이 일어날 수 있기 때문. 그래서 가상화폐의 경우도 부동소수점을 사용하지 않는다.
오늘 배운 내용은 아닌데 파이썬 3.7부터 적용되는 간편한 방법이라 아래와 같이 정리해 본다. 기본적인 포맷은 f'문자열{변수}문자열'입니다.
예를 들어
a = '나"
b = 500
test = f'당신과 {a}는 하루에 {b}원으로 산다'
print(test)
몇 가지 specifics을 보면
(1) 정렬 :왼쪽→ f'|{문자:<10}|'/ 가운데: → f'|{문자:^10}|'
(2) 소수점 자리수 : print(f'{3.14159265:2f}') ← 소수점 2자리
(3) 정수 자리수: print(f'{12:04d}') → 0012
함수의 재귀호출(recursive call)은 함수 안에서 함수 자기 자신을 호출하는 방식을 말한다. 일반적 상황에서는 잘 사용하지 않지만 알고리즘을 구현할 때 반복문 보다는 재귀호출이 더 직관적이고 이해하기 쉬운 경우가 많다
가장 유명한 예제는 팩토리얼 구하기이다.
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
print(factorial(5))
재귀호출 문제가 가장 유명한 알고리즘 문제는 하노이의 탑이다.