사용자 도구

사이트 도구


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

차이

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

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
컴퓨터:integer_and_floating_point [2024/02/27] – [정수와 부동소수] 정승환컴퓨터:integer_and_floating_point [2025/01/01] (현재) – [부동소수점 연산의 정밀성 손실] 정승환
줄 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자리수**)
    
 =====부동소수점 연산의 정밀성 손실===== =====부동소수점 연산의 정밀성 손실=====
줄 47: 줄 47:
 예를 들어, 우리가 다음과 같은 두 개의 부동소수를 더한다고 가정해봅시다: 예를 들어, 우리가 다음과 같은 두 개의 부동소수를 더한다고 가정해봅시다:
  
-  * <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.1709029362.txt.gz · 마지막으로 수정됨: 저자 정승환