스케일 팩터(컴퓨터 과학)

Scale factor (computer science)

컴퓨터 과학에서 척도 인자는 다른 척도의 숫자를 나타내기 위해 승수로 사용되는 숫자수학지수와 유사하게 기능한다.척도 계수는 실제 숫자의 집합이 특정한 숫자 형식을 맞추기 위해 다른 척도로 표현되어야 할 때 사용된다.척도 계수를 사용하면 표현 가능한 값의 범위가 넓어지지만 정밀도도 떨어져 특정 계산의 반올림 오차가 발생한다.

사용하다

프로그래밍의 편리함을 위해 또는 하드웨어가 제공하는 특정한 장점 때문에 특정 숫자 형식을 응용 프로그램에 선택할 수 있다.예를 들어, 초기 프로세서는 부분적인 값을 나타내기 위해 IEEE 부동 소수점 표준을 기본적으로 지원하지 않았기 때문에, 정수를 사용하여 실제 값에 스케일 팩터를 적용함으로써 실제 세계 값의 표현을 저장하였다.마찬가지로 하드웨어 산술은 고정 너비(일반적으로 데이터 유형에 따라 16, 32 또는 64비트)를 가지므로, 정밀도를 희생하더라도 스케일 계수는 더 큰 수(수동으로 곱하거나 지정된 스케일 계수로 나눈 값)를 나타낼 수 있다.[1]하드웨어가 부분적인 가치를 지원하지 않았기 때문에, 필연적으로 이것은 소프트웨어에서 수행되었다.척도 인자는 부동 소수에도 사용되며, 가장 일반적으로는 두 개의 검정력이다.예를 들어, 이중정밀 형식은 스케일링 계수(이진 지수)를 위해 11비트를, 의의는 53비트를 따로 설정하여, 서로 다른 범위의 숫자를 나타내기 위해 다양한 정밀도를 허용하고, 64 명시적 비트를 사용하여 나타낼 수 있는 것 이상으로 표현 가능한 숫자의 범위를 확대한다(p의 원가를 들더라도).퇴짜 [2]놓다

정밀도가 상실되는 경우의 예로서 16비트 비지정자(uint16)는 65,535까지의10 값만 보유할 수 있다.0에서 131,070까지의10 값을 나타내기 위해 서명되지 않은 16비트 정수를 사용하는 경우, 다음 중 하나의 척도계수를 사용한다.스케일링된 값이 실제 짝수 정수정확히 일치하도록 12가 도입될 것이다.결과적으로, 예를 들어, 저장된 1은 실제 세계 2를 나타내고 저장된 2는 실제 세계 4를 나타내기 때문에 숫자 3은 나타낼 수 없다. 이 표현에서 이러한 오류를 피할 수 있는 충분한 비트가 없다.

크기 조정된 값에 대한 작업

일단 실제 가치의 축소된 표현이 저장되면, 그 가치가 "실제 세계"로 되돌아올 필요가 있을 때까지 종종 스케일링을 무시할 수 있다.예를 들어 스케일링된 값을 두 개 추가하면 값을 풀고 실제 값을 추가한 다음 결과를 확장하는 것과 마찬가지로 유효하며, 전자는 훨씬 쉽고 빠르다.그러나 어느 접근법에서든 추가된 두 숫자는 같은 크기로 조정되어야 한다.[3]다른 수술의 경우 스케일링이 매우 중요하다.

예를 들어, 곱셈은 두 숫자 모두 크기가 조정된다는 것을 고려해야 한다.예를 들어, A와 B의 두 가지 실제 가치를 고려해보자.이러한 현실 세계 가치의 실제 곱셈은 다음과 같다.

A * B = P

대신 이들을 Z의 척도계수로 표시하고, 이러한 척도표현을 후속적으로 곱하면 그 결과는 다음과 같다.

AZ * BZ = Q

AZA의 스케일링된 실제 세계 가치 또는 단순히 A * Z제품이며, 마찬가지로 BZ는 스케일링된 B의 표현이다.스케일 곱하기 후에는 PZ에 저장된 값이 정답이 아니기 때문에 정답이 PZ로 기록되지 않는다.이는 다음과 같은 각 행이 동일한 문구를 재배열함으로써 알 수 있다.

AZ * BZ = Q A = Q * Z * B * Z = Q(A * B) * Z * Z = Q P * Z = Q P * Z = Q PZ * Z = Q

4행에서 P는 A * B를 대체한다.따라서 AZ * BZ (Q)의 결과는 PZ아니라 PZ * Z이다.PZ가 해답이었다면 덧셈과 뺄셈이 있는 경우처럼 스케일 팩터가 내장돼 있어 직접 저장할 수 있었다.그러나 곱셈의 경우, 두 개의 스케일링된 값의 곱셈에는 추가 스케일링이 내장되어 있다.이 점을 고려한다면, 수술을 수행하기 전에 AZBZAB로 변환할 필요가 없다. 그 결과는 반드시 Z로 나누어 보관해야 한다.이 후, PZ는 곱셈의 결과로 저장될 것이며, 이것은 실제로 AZ * BZ의 결과보다는 A * B(원하는 대답)의 결과의 축소표현이다.

공통 확장 시나리오

정수로 축척된 분수 값

앞에서 설명한 바와 같이 많은 구형 프로세서(및 일부 현재 프로세서)는 기본적으로 부분 수학을 지원하지 않는다.이 경우 소수점 이하 정밀도를 원하는 값에 10을 곱하여 정수로 확장할 수 있다.즉, 소수점 오른쪽까지 n자릿수를 보존하기 위해서는 전체 숫자에 10n 곱해야 한다.이진법으로 계산을 수행하는 컴퓨터에서는 실수에 2를m 곱하여 이진법 포인트의 오른쪽에 m자리를 보존하거나, 또는 m가 위치하는 값을 왼쪽으로 비트 이동시킬 수 있다.예를 들어 다음과 같은 실제 세계의 분수 값 집합에서 모두 소수점 오른쪽에 세 자리수를 가진다.

15.400, 0.133, 4.650, 1.000, 8.001

모든 정보를 저장하려면(즉, 정밀도를 잃지 않기 위해), 이 숫자에 103(1,000)을 곱하여 다음 정수 값을 제공해야 한다.

15400, 133, 4650, 1000, 8001

스케일링된 숫자의 값 때문에, 그것들은 8비트 정수로 저장할 수 없다; 그것들은 적어도 14개의 서명되지 않은 비트, 또는 더 현실적으로 16개를 필요로 할 것이다.

분수에 대한 정수 값

일부 프로세서, 특히 임베디드 시스템 산업에서 공통적으로 사용되는 DSP는 QIQ 형식과 같은 고정 포인트 산술에 대한 지원을 내장하고 있다.

숫자의 분수 부분이 필드에서 일부 비트를 차지하기 때문에 고정9포인트 값에서 가능한 값의 범위는 정수에 제공할 수 있는 동일한 비트 수보다 작다.[4]예를 들어, 8비트 필드의 경우, 부호 없는 정수는 [0, 255]의 값을 저장할 수 있지만, 분수 부분에 5비트가 할당되어 있는 부호 없는 고정점은 정수 값에 대해 3비트만 남겨두고, 따라서 [0, 7]의 정수 값만 저장할 수 있다.(두 필드가 저장할 수 있는 고유값의 수는 같기 때문에 28 = 256이다.)또한 고정점 필드는 각 정수 값에 대해 32개의 부분 값을 저장할 수 있다.)따라서 스케일링 계수를 사용하여 고정점 형식의 최대값보다 클 수 있는 실제 값을 저장하는 것이 일반적이다.

예를 들어, 서명되지 않은 8비트 고정점 형식(4 정수 비트 4개, 분수 비트 4개)을 사용할 때 가장 높은 표현 가능한 정수 값은 15이고, 가장 높은 표현 가능한 혼합 값은 15.9375(0xF)이다.F 또는 1111.111b).원하는 실제 세계 값이 [0,160] 범위 내에 있는 경우, 이 고정점 표현 범위 내에 맞도록 크기를 조정해야 한다.스케일링 160 X ½10은 16을 주기 때문에 이 고정점 형식으로 저장할 수 있는 최대값보다 크기 때문에 여기서 ½10의 스케일 팩터를 사용할 수 없다.그러나 최대 스케일 값인 16011 = 14.54의 값이 이 범위에 적합하기 때문에 ½11은 스케일 계수로 작동한다.이 집합의 경우:

154, 101, 54, 3, 0, 160

스케일 팩터 1/11로 스케일링하면 다음과 같은 값을 얻을 수 있다.

154/11 = 14 101/11 = 9.1818... 54/11 = 4.9090...3/11 = 0.2727...0/11 = 0 160/11 = 14.5454... 

이 값들 중 많은 수가 선택된 척도계수에서 따르는 반복 십진법을 포함하기 때문에 잘렸다.이러한 값을 고정점 형식으로 저장하면 일부 정밀도가 손실된다(원래 정수의 정확한 값과는 대조적으로).8비트 포맷은 256개의 다른 값을 저장할 수 있지만, 이 세트의 숫자는 161개의 가능한 값(0~160)만 있는 범위로부터 나오기 때문에 이 또한 문제가 된다.알고 보니 불필요한 정밀도 요건과 반올림 오차(가장 가까운 표현 가능한 값으로 실제 값을 근사할 때)를 도입한 스케일 팩터인 ½11이 문제였다.[5]이 문제를 피하거나 해결하려면 더 나은 척도 인자를 선택해야 한다.

척도 요인 선택

위의 예는 특정 척도계수가 불필요한 정밀손실이나 반올림 오차를 유발할 수 있는 방법을 설명하며, 올바른 척도계수를 선택하는 중요성을 강조한다.스케일 팩터 ½을 사용하고 이항 표현으로 변환하면 다음과 같은 값을 얻을 수 있다.

154/11 = 14 = 1110.0 101/11 = 9.1818...= 1001.00101110... 54/11 = 4.9090...= 100.111010...3/11 = 0.2727...= 0.010010...0/11 = 0 = 0.0 160/11 = 14.5454...= 1110.10010... 

이항 분율 중 몇몇은 고정 포인트 설정 형식에 의해 제공되는 4개 부분 비트 이상을 필요로 한다.(이것은 부분적으로 전자도 2진수로 끝나지 않기 때문이다.)필드(정수 4개 및 분수 4개)에 맞추기 위해 나머지 비트를 잘라 다음과 같이 저장된 표현을 제공할 수 있다.

1110.0000 1001.0010 0100.1110 0000.0100 0000.0000 1110.1001

또는 십진수:

14.0 9.125 4.875 0.25 0.0 14.5625

이들을 다시 현실세계로 불러들일 때, 그들은 척도계수 ½11로 나눈다.이는 원래 스케일링의 역행으로, 다음과 같은 "실제" 값을 부여한다.

154.0 100.375 53.625 2.75 0 160.1875

이러한 값은 원래 값과 같지 않다(축소하고 이 8비트 표현에 맞추기 전).가장 눈에 띄게, 그것들은 더 이상 모두 정수가 아니며, 이는 스케일링 팩터의 좋지 않은 선택으로 인해 저장소에 오류가 발생했음을 즉시 나타낸다.

더 나은 척도 요인 선택

대부분의 데이터 세트는 완벽한 스케일 팩터를 가지고 있지 않을 것이다. 대부분의 경우 스케일링 프로세스에 의해 약간의 오류가 발생할 것이다.그러나 더 나은 척도 인자를 선택하는 것이 가능할 수 있다.이상적인 척도 계수는 가장 작은 것이 아니라 가능한 한 정밀도를 보존하는 것일 수 있다.

숫자를 2의 힘으로 나누는 것은 2의 각 힘에 대해 모든 비트를 한 번 오른쪽으로 옮기는 것과 같다. (이것은 10의 힘으로 곱하거나 나눌 때 모든 소수 자릿수를 왼쪽이나 오른쪽으로 옮기는 것과 같은 이진수다.)비트의 패턴은 변하지 않고 2진수 지수와 같은 위치의 수(예를 들어 8 = 2로3 나눌 때 3자리)만 이동한다.반면 2진수 2의 정수 검정력이 아닌 숫자로 나누면 비트 패턴이 변한다.이것은 인위적으로 필요한 정밀도를 도입하여 2진점 오른쪽에 비트가 더 많은 비트 패턴을 생성할 가능성이 있다.이것은 특히 분수 부분이 2의 이 아닌 분모를 가지고 있을 때, 모든 분수가 2의 힘의 왕복선이 2로 반복되지 않기 때문에 더욱 그러하다.[6]따라서 거의 항상 2의 힘인 축척 인자를 사용하는 것이 바람직하다.잘림으로 인해 필드 끝에서 바로 이동되는 비트가 손실될 수 있지만, 이렇게 하면 부정확하거나(반올림 오류로 인해) 잘릴 새로운 비트가 도입되는 것을 피할 수 있다.[6]

척도계수에서 2의 힘을 사용하는 예로서, 위의 데이터 집합에 1/16의 척도계수를 적용할 수 있다.원본 데이터 세트의 이진수 값은 다음과 같다.

154 = 1001 1010 101 = 0110 0101 54 =  0011 0110 3 =   0000 0011 0 =   0000 0000 160 = 1010 0000

0과 255 사이의 정수인 이 모든 것은 8비트로 정확하게 표현할 수 있다.이것들을 ½16으로 스케일링하는 것은 16으로 나누는 것과 같고, 이것은 비트를 오른쪽으로 4군데 옮기는 것과 같다.이 경우 각 숫자의 처음 4비트와 마지막 4비트 사이에 이진점을 삽입하여 스케일링을 한다.그것은 이 표현의 미리 정해진 형식과 같다.따라서 이 모든 숫자는 정수로 나타내기 위해 8비트 이상을 필요로 하지 않기 때문에, 이들을 축소하고 고정점 형식으로 저장하는 데 8비트 이하가 필요하지 않다.

참고 항목

참조

  1. ^ 린츠 2003, 페이지 12-13.
  2. ^ 린츠 2003, 페이지 14-15.
  3. ^ 예이츠 2013, 페이지 6.
  4. ^ 예이츠 2013 페이지 4-5.
  5. ^ Linz 2013, 페이지 18.
  6. ^ a b "Binary Fractions". Floating-point-gui.de. Retrieved 6 July 2020.