사용자 도구

사이트 도구


컴퓨터:integer_and_floating_point
[홈레코딩 필독서]"모두의 홈레코딩"구매링크
가성비 있는 녹음실 찾으시나요? 리버사이드 재즈 스튜디오에서 녹음하세요!

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
컴퓨터:integer_and_floating_point [2024/02/22] – 제거됨 - 바깥 편집 (Unknown date) 127.0.0.1컴퓨터:integer_and_floating_point [2025/01/01] (현재) – [부동소수점 연산의 정밀성 손실] 정승환
줄 1: 줄 1:
 +======정수와 부동소수======
  
 +  * **정수 : Integer**
 +  * **부동소수 : Floating point**
 +
 +{{오디오_미신:높은_bit_depth가_무조건_좋은거다:pasted:20220112-234448.png}}
 +
 +
 +컴퓨터가 숫자를 표현하거나 계산할 때 사용하는 두가지 방식
 +
 +8 자리로 숫자표현을 할 때
 +  * 12345678 과 같이 표현하면 표현의 범위는 1~99999999 까지이다.((이와 같은 형식을 10진수 8비트 정수 형식이라고 합니다. 실제의 컴퓨터의 정수형 표현은 사실 이진수입니다. 이해하기 쉽게 10진수로 이야기 했습니다.))
 +  * 1.2345678 과 같이 소수점 하나를 꼭 넣어서 표현하면 표현의 범위는 0.0000001 부터 9999999.9 까지이다.((이와 같은 형식을 10진수 9(8+1)비트 부동소수 형식이라고 합니다. 8비트의 숫자+ 1비트의 소수점 자리수 표기(0,1,2,3,4,5,6,7 소수점 자리) 실제의 컴퓨터의 부동소수형 표현은 사실 이진수를 사용합니다. 이해하기 쉽게 10진수로 이야기 했습니다.)) 
 +위의 두가지 방식 중에 위의 것이 정수의 표현 방식이고 아래와 같은 방식이 부동소수(자리가 정해지지 않은 소수점)의 표현 방식이다.
 +
 +따라서, 컴퓨터에서 제한된 자리수를 가지고 숫자를 표현할 때 부동소수 방식을 사용하면 훨씬 더 많은 범위 및 훨씬 해상도 높은 숫자(1.0000001~1.9999999 처럼 1 과 2사이를 엄청나게 세분화하여 표현 가능)를 표현할 수 있다. 다만 계산의 정확성은 정수형 표현이 정확하고 계산의 속도 또한 빠르다.((부동소수의 계산에서는 전체 자릿수를 벗어나면 버려지는 소숫점들이 생길 가능성이 있기 때문이다.))
 +
 +=====배정밀도=====
 +
 +**Double Precision** 
 +
 +배정밀도(double precision)는 정수와 부동소수점을 모두 다루는 방법 중 하나입니다. 
 +
 +1. **정수형에서의 배정밀도**: 정수형에서 배정밀도는 더 많은 비트를 사용하여 정수를 표현합니다. 예를 들어, 48비트 배정밀도 정수는 48개의 비트를 사용하여 정수를 나타내며, 부호 비트와 숫자 비트로 나뉩니다. 배정밀도 정수를 사용하면 더 큰 정수값을 표현할 수 있습니다. 이는 정수 데이터를 더 큰 범위로 표현하거나 더 높은 정밀도로 다룰 때 유용합니다.
 +
 +2. **부동소수점에서의 배정밀도**: 부동소수점에서 배정밀도는 더 많은 비트를 사용하여 부동소수점을 표현합니다. 일반적으로 배정밀도는 64비트를 사용하며, 부호 비트, 지수 부분, 그리고 가수 부분으로 나뉩니다. 배정밀도를 사용하면 더 큰 숫자를 더 정확하게 표현할 수 있습니다. 이는 과학 및 엔지니어링 분야에서 높은 정밀도의 계산이 필요한 경우에 유용합니다.
 +
 +정수와 부동소수점에서의 배정밀도는 각각 데이터 형식에 따라 다르지만, 모두 더 큰 범위와 높은 정밀도를 제공하여 계산의 정확성을 향상시키는 데 사용됩니다.
 +
 +=====각 데이터 형식의 표현 범위=====
 +
 +정수형 숫자 표현의 범위\\
 +  * 16bit 정수형의 총 표현 가능 단계 = 2<sup>16</sup> = 65536(**5자리수**)
 +  * 24bit 정수형의 총 표현 가능 단계 = 2<sup>24</sup> = 16777216(**8자리수**)
 +  * 32bit 정수형의 총 표현 가능 단계 = 2<sup>32</sup> = 4294967296(**10자리수**)
 +  * 48bit 정수형 배정밀도= 2<sup>48</sup> = 2.8147498e+14 (e+x 는 +10^X 를 말합니다.) = 28147598000(**14자리수**)
 +  * 56bit 정수형 = 2<sup>56</sup> = 7.2057594e+16(**16자리수**)
 +  * 64bit 정수형 = 2<sup>64</sup> = 1.8446744e+19(**19자리수**)
 +
 +부동소수형 숫자 표현의 범위\\
 +  * 32bit 부동소수형의 가장 작은 숫자 = 1.0 x 2<sup>-126</sup> = 1.1754944e-38 (**소수점 38자리수**)
 +  * 32bit 부동소수형의 가장 큰 숫자 = (2 - 2<sup>-23</sup>) x 2<sup>127</sup> = 3.4028235e+38 = (**38자리수**)
 + 
 +=====부동소수점 연산의 정밀성 손실=====
 +부동소수 연산의 정밀성 손실 문제를 구체적인 예시로 설명해보겠습니다.
 +
 +예를 들어, 우리가 다음과 같은 두 개의 부동소수를 더한다고 가정해봅시다:
 +
 +  * 0.1 x 10<sup>-20</sup>
 +  * 0.2 x 10<sup>-20</sup>
 +
 +이 두 부동소수를 더하면 우리는 0.3 x 10<sup>-20</sup>이 나와야 한다고 예상할 수 있습니다. 그러나 컴퓨터에서는 부동소수점을 표현할 때 소수점 이하의 정밀도에 한계가 있기 때문에 정확한 결과를 얻기 어렵습니다.
 +
 +실제로 컴퓨터에서 이러한 덧셈을 수행하면 다음과 같은 결과가 나올 수 있습니다:
 +
 +  * 0.1 x 10<sup>-20</sup>를 표현할 때 발생하는 정밀성 손실로 인해 실제로는 0.10000000000000000000005 x 10<sup>-20</sup> 정도로 저장될 수 있습니다.
 +  * 0.2 x 10<sup>-20</sup>도 마찬가지로 정밀성 손실로 인해 0.20000000000000000000004 x 10<sup>-20</sup> 정도로 저장될 수 있습니다.
 +
 +따라서 이 두 수를 더하면 0.30000000000000000000009 x 10<sup>-20</sup> 정도의 값이 나올 수 있습니다. 이것은 우리가 원했던 0.3 x 10<sup>-20</sup>과 약간 다른 값이며, 부동소수점 연산의 정밀성 손실로 인해 발생한 것입니다.((그림이나 오디오 표현에서는 하나도 문제가 안되는 정도의 오차입니다.))
 +
 +이러한 예시를 통해, 부동소수 연산에서의 정밀성 손실이 어떻게 발생하는지 좀 더 구체적으로 이해할 수 있습니다.
 +
 +이러한 오차는 금융 분야에서의 시간, 금액 계산이나, 공학에서의 정밀 계산이 필요한 분야에서는 큰 오류를 범할 수 있지만, **그래픽 분야 또는 오디오 분야에서는 큰 문제가 되지 않습니다.** 그래서, 그래픽 카드에서 쓰이는 GPU에서는 거의 부동소수형 연산자를 가진 칩을 사용하고, 오디오 쪽에서는 최근 부동소수형 DSP 칩들이 레이턴시가 짧아진 제품들이 나오면서((부동소수 연산자 DSP 칩이 나오게 된 원인은 공학계산 용도 등으로도 부동소수 오차가 크게 의미 없다는 판단이었을 것이다. 사실 DSP는 계산의 정확도 때문에 그동안 정수형 연산자 DSP가 대세였다.)) 부동소수형 연산칩을 사용하는 경향이 있습니다.

[공지]회원 가입 방법
[공지]글 작성 및 수정 방법