floating-point부동 소수점으로 시작하기


비고

이 절에서는 부동 소수점의 개요와 개발자가 왜 부동 소수점을 사용하고자하는지 설명합니다.

또한 부동 소수점 내에있는 큰 주제를 언급하고 관련 주제에 링크해야합니다. 부동 소수점 용 문서는 새로운 기능이므로 해당 관련 항목의 초기 버전을 만들어야 할 수 있습니다.

개요

부동 소수점이란 무엇입니까?

숫자에는 두 가지 유형이 있습니다.

  • 기수 점 앞뒤에 특정 자릿수를 사용할 수있는 고정 점.
  • 가수 및 지수에 대해 특정 자릿수를 사용할 수있는 부동 소수점입니다.

소수점 이하 3 자리수, 소수점 이하 2 자리수의 소수점 이하 자릿수를 사용하는 예 :

  • 0은 000.00으로 표시됩니다.
  • 0.123은 000.12로 표시됩니다.
  • 0.00123은 000.00으로 표시됩니다.
  • 1은 001.00으로 표시됩니다.
  • 1.123은 001.12로 표시됩니다.
  • 1.00123은 001.00으로 표시됩니다.
  • 123.456은 123.45로 표시됩니다.
  • 1234.56은 234.56으로 저장 될 것이므로 오류입니다.

가수에 대해 소수점 다섯 자리 및 지수에 대해 소수점 하나와 함께 십진수를 사용하는 예는 다음과 같습니다.

  • 0은 .00000 x 10 ^ 0으로 나타낼 수 있습니다.
  • 0.1은 .10000 x 10 ^ 0으로 표현 될 수있다.
  • 0.0000123456은 .12345 x 10 ^ -4
  • 0.000000000123456은 .12345 x 10 ^ -9
  • 지수가 숫자를 저장할만큼 크지 않기 때문에 0.00000000001은 오류입니다.
  • 1은 .10000 x 10 ^ 1
  • 1.123은 .11230 x 10 ^ 1
  • 1.00123은 .10012 x 10 ^ 1
  • 123.45678은 .12345 x 10 ^ 2로 나타낼 수 있습니다.
  • 123456789.1은 .12345 x 10 ^ 9로 표현 될 수 있습니다.
  • 지수가 숫자를 저장할 정도로 크지 않으므로 1000000000은 오류입니다.

그래서 부동 소수점 숫자는 같은 정도의 상대적 정확도로 매우 다른 크기 (0.000000000123456 및 123456789.1)의 숫자를 나타낼 수 있습니다.

고정 소수점 수는 숫자의 크기 (예 : 금액)에 관계없이 항상 소수점 이하 자릿수가 필요할 때 유용합니다. 부동 소수점 숫자는 크기가 달라 정확도가 필요한 경우에 유용합니다. 예를 들어, 도로 엔지니어에게 거리는 미터로 측정되며 0.01 미터는 중요하지 않지만 마이크로 칩 설계자는 0.0000001 미터와 .000000001 미터의 차이가 크며 물리학자가 거대한 숫자를 사용해야 할 수도 있습니다. 동일한 계산의 작은 숫자. 다양한 크기의 정확성이 부동 소수점 숫자를 유용하게 만듭니다.

작동 원리

컴퓨터는 10 진법을 사용하지 않습니다. 이진법을 사용하기 때문에 부동 소수점에 문제가 발생합니다. 소수점 이하의 숫자를 부동 소수점 숫자로 정확하게 표현할 수 없으며 계산에 반올림 오류가 발생하기 때문입니다.

십진수로 모든 예제를 수행 했으므로 부동 소수점 숫자를 십진수의 합으로 저장하는 대신 바이너리이기 때문에주의해야합니다.

123.875 = 1/10^-2 + 2/10^-1 + 3/10^0 + 8/10^1 + 7/10^2 + 5/10^3
 

컴퓨터는 부동 소수점 수를 2 진수의 합으로 저장합니다.

123.875 = 1/2^-6 + 1/2^-5 + 1/2^-4 + 1/2^-3 + 1/2^-1 + 1/2^0 + 1/2^1 + 1/2^2 + 1/2^3
 

이러한 분수를 나타내는 비트 패턴을 저장하는 여러 가지 방법이 있지만 대부분의 컴퓨터가 현재 사용하는 방법은 IEEE-754 표준을 기반으로합니다. 10 진수 및 2 진 표현을 저장하고 다른 크기의 데이터 유형을 저장하는 규칙이 있습니다.

IEEE 표준을 사용하여 정상 숫자를 저장하는 방법은 다음과 같습니다.

  • 부호를위한 1 비트 - MSB에 저장된 1은 음수를 의미하고 0은 양수를 의미합니다.
  • 지수의 일부 비트 - 양수 및 음수 지수를 얻기 위해 바이어스를 뺍니다.
  • 가수의 일부 비트 - 소수 자리 앞에 암시적인 1이있는 소수점 이하 자릿수.

보다 점진적인 언더 플로우를 허용하기 위해 비정규 화 된 수 (지수 비트가 모두 0 일 때)는 특별히 처리됩니다. 즉, 지수는 -126으로 설정되고 소수점 앞의 암시 적 1은 가수에 추가되지 않습니다.

32 비트 IEEE-754 부동 소수점 숫자

일반 32 비트 IEEE-754 부동 소수점 숫자의 경우 :

  • 비트 32는 부호이다.
  • 비트 24-31은 지수 임 - 바이어스는 127
  • 비트 1-23은 가수

따라서 정상적인 숫자는 다음과 같이 계산됩니다.

-1^sign * 2^(exponent-bias) * 1.mantissa
 

비트 패턴이 다음과 같으면

0 10000101 11101111100000000000000
 

값은 다음과 같습니다.

-1^0 * 2^(133-127) * 1.111011111
-1^0 *     2^6     * (1 + 1/2 + 1/4 + 1/8 + 1/32 + 1/64 + 1/128 + 1/256 + 1/512)
   1 *      64     * 991/512
         123.875
 

몇 가지 특수 값이 있습니다.

0 11111111 11111111111111111111111 = NaN
0 11111111 00000000000000000000000 = +infinity
1 11111111 00000000000000000000000 = -infinity
0 00000000 00000000000000000000000 = +Zero
1 00000000 00000000000000000000000 = -Zero
 

32 비트 IEEE-754 형식의 특징은 다음에서 찾을 수 있습니다.