사용자 도구

사이트 도구


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

차이

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

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
컴퓨터:integer_and_floating_point [2024/02/22] – [부동소수점 연산의 정밀성 손실] 정승환컴퓨터:integer_and_floating_point [2025/01/01] (현재) – [부동소수점 연산의 정밀성 손실] 정승환
줄 9: 줄 9:
 컴퓨터가 숫자를 표현하거나 계산할 때 사용하는 두가지 방식 컴퓨터가 숫자를 표현하거나 계산할 때 사용하는 두가지 방식
  
-8 자리로 숫자표현을 할때 +8 자리로 숫자표현을 할 때 
-  * 12345678 과 같이 표현하면 표현의 범위는 1~99999999 까지이다. +  * 12345678 과 같이 표현하면 표현의 범위는 1~99999999 까지이다.((이와 같은 형식을 10진수 8비트 정수 형식이라고 합니다. 실제의 컴퓨터의 정수형 표현은 사실 이진수입니다. 이해하기 쉽게 10진수로 이야기 했습니다.)) 
-  * 1.2345678 과 같이 소수점 하나를 꼭 넣어서 표현하면 표현의 범위는 0.0000001 부터 9999999.9 까지이다.+  * 1.2345678 과 같이 소수점 하나를 꼭 넣어서 표현하면 표현의 범위는 0.0000001 부터 9999999.9 까지이다.((이와 같은 형식을 10진수 9(8+1)비트 부동소수 형식이라고 합니다. 8비트의 숫자+ 1비트의 소수점 자리수 표기(0,1,2,3,4,5,6,7 소수점 자리) 실제의 컴퓨터의 부동소수형 표현은 사실 이진수를 사용합니다. 이해하기 쉽게 10진수로 이야기 했습니다.)) 
 위의 두가지 방식 중에 위의 것이 정수의 표현 방식이고 아래와 같은 방식이 부동소수(자리가 정해지지 않은 소수점)의 표현 방식이다. 위의 두가지 방식 중에 위의 것이 정수의 표현 방식이고 아래와 같은 방식이 부동소수(자리가 정해지지 않은 소수점)의 표현 방식이다.
  
줄 31: 줄 31:
  
 정수형 숫자 표현의 범위\\ 정수형 숫자 표현의 범위\\
-  * 16bit 정수형의 총 표현 가능 단계 = <m>2^16</m> = 65536(**5자리수**) +  * 16bit 정수형의 총 표현 가능 단계 = 2<sup>16</sup> = 65536(**5자리수**) 
-  * 24bit 정수형의 총 표현 가능 단계 = <m>2^24</m> = 16777216(**8자리수**) +  * 24bit 정수형의 총 표현 가능 단계 = 2<sup>24</sup> = 16777216(**8자리수**) 
-  * 32bit 정수형의 총 표현 가능 단계 = <m>2^32</m> = 4294967296(**10자리수**) +  * 32bit 정수형의 총 표현 가능 단계 = 2<sup>32</sup> = 4294967296(**10자리수**) 
-  * 48bit 정수형 배정밀도= <m>2^48</m> = 2.8147498e+14 (e+x 는 +10^X 를 말합니다.) = 28147598000(**14자리수**) +  * 48bit 정수형 배정밀도= 2<sup>48</sup> = 2.8147498e+14 (e+x 는 +10^X 를 말합니다.) = 28147598000(**14자리수**) 
-  * 56bit 정수형 = <m>2^56</m> = 7.2057594e+16(**16자리수**) +  * 56bit 정수형 = 2<sup>56</sup> = 7.2057594e+16(**16자리수**) 
-  * 64bit 정수형 = <m>2^64</m> = 1.8446744e+19(**19자리수**)+  * 64bit 정수형 = 2<sup>64</sup> = 1.8446744e+19(**19자리수**)
  
 부동소수형 숫자 표현의 범위\\ 부동소수형 숫자 표현의 범위\\
-  * 32bit 부동소수형의 가장 작은 숫자 = <m>1.0 2^{-126}</m> = 1.1754944e-38 (**소수점 38자리수**) +  * 32bit 부동소수형의 가장 작은 숫자 = 1.0 2<sup>-126</sup> = 1.1754944e-38 (**소수점 38자리수**) 
-  * 32bit 부동소수형의 가장 큰 숫자 = <m>(2 - 2^{-23}2^{127}</m> = 3.4028235e+38 = (**38자리수**)+  * 32bit 부동소수형의 가장 큰 숫자 = (2 - 2<sup>-23</sup>2<sup>127</sup> = 3.4028235e+38 = (**38자리수**)
    
 =====부동소수점 연산의 정밀성 손실===== =====부동소수점 연산의 정밀성 손실=====
-물론입니다! 부동소수 연산의 정밀성 손실 문제를 구체적인 예시로 설명해보겠습니다.+부동소수 연산의 정밀성 손실 문제를 구체적인 예시로 설명해보겠습니다.
  
 예를 들어, 우리가 다음과 같은 두 개의 부동소수를 더한다고 가정해봅시다: 예를 들어, 우리가 다음과 같은 두 개의 부동소수를 더한다고 가정해봅시다:
  
-  * <m>0.1 10^{-20}</m+  * 0.1 10<sup>-20</sup
-  * <m>0.2 10^{-20}</m>+  * 0.2 10<sup>-20</sup>
  
-이 두 부동소수를 더하면 우리는 <m>0.3 10^{-20}</m>이 나와야 한다고 예상할 수 있습니다. 그러나 컴퓨터에서는 부동소수점을 표현할 때 소수점 이하의 정밀도에 한계가 있기 때문에 정확한 결과를 얻기 어렵습니다.+이 두 부동소수를 더하면 우리는 0.3 10<sup>-20</sup>이 나와야 한다고 예상할 수 있습니다. 그러나 컴퓨터에서는 부동소수점을 표현할 때 소수점 이하의 정밀도에 한계가 있기 때문에 정확한 결과를 얻기 어렵습니다.
  
 실제로 컴퓨터에서 이러한 덧셈을 수행하면 다음과 같은 결과가 나올 수 있습니다: 실제로 컴퓨터에서 이러한 덧셈을 수행하면 다음과 같은 결과가 나올 수 있습니다:
  
-  * <m>0.1 10^{-20}</m>를 표현할 때 발생하는 정밀성 손실로 인해 실제로는 <m>0.10000000000000000000005 10^{-20}</m> 정도로 저장될 수 있습니다. +  * 0.1 10<sup>-20</sup>를 표현할 때 발생하는 정밀성 손실로 인해 실제로는 0.10000000000000000000005 10<sup>-20</sup> 정도로 저장될 수 있습니다. 
-  * <m>0.2 10^{-20}</m>도 마찬가지로 정밀성 손실로 인해 <m>0.20000000000000000000004 10^{-20}</m> 정도로 저장될 수 있습니다.+  * 0.2 10<sup>-20</sup>도 마찬가지로 정밀성 손실로 인해 0.20000000000000000000004 10<sup>-20</sup> 정도로 저장될 수 있습니다.
  
-따라서 이 두 수를 더하면 <m>0.30000000000000000000009 10^{-20}</m> 정도의 값이 나올 수 있습니다. 이것은 우리가 원했던 <m>0.3 10^{-20}</m>과 약간 다른 값이며, 부동소수점 연산의 정밀성 손실로 인해 발생한 것입니다.+따라서 이 두 수를 더하면 0.30000000000000000000009 10<sup>-20</sup> 정도의 값이 나올 수 있습니다. 이것은 우리가 원했던 0.3 10<sup>-20</sup>과 약간 다른 값이며, 부동소수점 연산의 정밀성 손실로 인해 발생한 것입니다.((그림이나 오디오 표현에서는 하나도 문제가 안되는 정도의 오차입니다.))
  
 이러한 예시를 통해, 부동소수 연산에서의 정밀성 손실이 어떻게 발생하는지 좀 더 구체적으로 이해할 수 있습니다. 이러한 예시를 통해, 부동소수 연산에서의 정밀성 손실이 어떻게 발생하는지 좀 더 구체적으로 이해할 수 있습니다.
  
-이러한 오차는 금융 분야에서의 시간, 금액 계산이나, 공학에서의 정밀 계산이 필요한 분야에서는 큰 오류를 범할 수 있지만, 그래픽 분야 또는 오디오 분야에서는 큰 문제가 되지 않습니다. 그래서, 그래픽 카드에서 쓰이는 GPU에서는 거의 부동소수형 연산자를 가진 칩을 사용하고, 오디오 쪽에서는 최근 부동소수형 DSP 칩들이 레이턴시가 짧아진 제품들이 나오면서((부동소수 연산자 DSP 칩이 나오게 된 원인은 공학계산 용도 등으로도 부동소수 오차가 크게 의미 없다는 판단이었을 것이다. 사실 DSP는 계산의 정확도 때문에 그동안 정수형 연산자 DSP가 대세였다.)) 부동소수형 연산칩을 사용하는 경향이 있습니다.+이러한 오차는 금융 분야에서의 시간, 금액 계산이나, 공학에서의 정밀 계산이 필요한 분야에서는 큰 오류를 범할 수 있지만, **그래픽 분야 또는 오디오 분야에서는 큰 문제가 되지 않습니다.** 그래서, 그래픽 카드에서 쓰이는 GPU에서는 거의 부동소수형 연산자를 가진 칩을 사용하고, 오디오 쪽에서는 최근 부동소수형 DSP 칩들이 레이턴시가 짧아진 제품들이 나오면서((부동소수 연산자 DSP 칩이 나오게 된 원인은 공학계산 용도 등으로도 부동소수 오차가 크게 의미 없다는 판단이었을 것이다. 사실 DSP는 계산의 정확도 때문에 그동안 정수형 연산자 DSP가 대세였다.)) 부동소수형 연산칩을 사용하는 경향이 있습니다.

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

컴퓨터/integer_and_floating_point.1708610143.txt.gz · 마지막으로 수정됨: 저자 정승환