💡 1/3을 십진 소수점으로 나타낸 결과 :
💡 9.625를 이진수로 변환:
💡 0.1를 이진수로 변환:
💡 int 자료형은 32개의 비트 (4 바이트) 를 사용해, 소수점이 없는 정수 데이터를 저장하기 위한 자료형
한 개의 비트에는 0 또는 1이 들어간다.
💡 23비트를 숫자 표현에 사용할 수 있고, 소숫점의 자리도 필요한 대로 움직일 수 있으므로 고정소수점 보다 효율적으로 비트를 활용해서 다양한 숫자들을 표현할 수 있다.
💡 컴퓨터는 한정된 메모리 공간을 최대한 절약해서 소프트웨어의 많은 데이터들을 올려두고 연산해야 하기 때문에 오차가 생긴다는 단점에도, 부동소수점 자료형들로 실수들을 표현함.
🗣️ 부동 소수점은 모든 소숫점을 1.xxxx 식으로 나타낸다.
- ex) 1001.101 -> 1.001101 로 소숫점을 앞으로 세 칸 움직여 나타낸다.
💡 0.1를 부동소수점을 활용해서 나타내기
- 0.1은 이진수에서 0.000110011 ... 로 무한소수로 나타남.
- 이를 1.xxx로 시작하는 숫자가 되려면 소수점이 뒤로 네 칸 움직여야 한다.
💡 파이썬으로, 제곱수 판별하는 함수를 작성하고, 제출을 하니 오답이 발생하는 경우가 있었다.
import math def solution(n): num = math.sqrt(n) if n == num ** 2 : return 1 return 2
🗣️ 해당 오류가 발생한 원인 :
컴퓨터는 숫자를 비롯한 모든 데이터를 이진법으로 표현하고 처리한다. 이 과정에서 오류가 발생한 경우이다.
🗣️ 해결방안 (1):
파이썬에서 부동 소수점을 보다 더 정확하게 계산하기 위해 고안된 decimal 라이브러리 사용import math import decimal def solution(n): num = decimal.Decimal(math.sqrt(n)) if n == num ** 2 : return 1 return 2
🗣️ 해결방안 (2):
위에서 math.sqrt(n)를 int 자료형으로 감싸서 받아주면 됨.import math def solution(n): num = int(math.sqrt(n)) if n == num ** 2 : return 1 return 2