맨위로가기

부동소수점

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

부동소수점은 컴퓨터에서 실수를 표현하는 방식 중 하나로, 밑(β), 가수부, 지수부를 사용하여 숫자를 나타낸다. 과학적 표기법과 유사하게 가수의 길이는 정밀도를 결정하며, 부동소수점 숫자의 값은 가수에 밑을 지수의 거듭제곱으로 곱하여 계산한다. 역사적으로 다양한 밑이 사용되었으며, 현재는 IEEE 754 표준이 가장 널리 사용된다. 32비트 컴퓨터에서는 부호, 지수, 가수로 실수를 표현하며, IEEE 754는 단정밀도, 배정밀도 등 다양한 형식을 제공한다. 부동소수점 연산은 덧셈, 뺄셈, 곱셈, 나눗셈을 포함하며, 지수 맞춤, 가수 연산, 반올림 과정을 거친다. 하지만 유효 숫자 손실, 반올림 오차 등의 문제로 인해 정확도 문제가 발생할 수 있으며, 오버플로, 언더플로, 0으로 나누기 등의 예외 처리가 필요하다. 이러한 문제점을 해결하기 위해 고정 소수점, 로그 숫자 시스템, 유리수 산술, 구간 산술, 컴퓨터 대수 시스템 등 다양한 대안이 존재한다.

더 읽어볼만한 페이지

  • 부동소수점 - IEEE 754
    IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다.
  • 부동소수점 - IEEE 754-1985
    IEEE 754-1985는 부동소수점 수의 표현, 연산, 반올림 등을 정의하는 기술 표준으로, 부호 비트, 지수, 가수를 사용하여 숫자를 표현하며, 단정밀도, 배정밀도, 확장 정밀도 형식을 제공하고, 0, 무한대, NaN과 같은 특수한 값을 정의하며, 표준 연산과 다양한 함수 및 술어를 제공한다.
  • 컴퓨터 산술 - IEEE 754
    IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다.
  • 컴퓨터 산술 - 1의 보수
    1의 보수는 이진수에서 양수는 일반적인 이진수로, 음수는 양수의 각 비트를 반전시켜 표현하며, 덧셈 시 자리올림수가 발생하면 결과값에 더해야 하고, 0을 중복 표현하는 단점으로 현대에는 2의 보수가 주로 사용된다.
부동소수점
부동소수점
다양한 숫자 표현의 비교. 부동소수점은 넓은 범위를 표현할 수 있지만, 정수와 달리 띄엄띄엄 떨어져 있다.
다양한 숫자 표현의 비교. 부동소수점은 넓은 범위를 표현할 수 있지만, 정수와 달리 띄엄띄엄 떨어져 있다.
일반 정보
종류컴퓨터 수 체계
사용 분야넓은 범위의 값을 근사적으로 표현
특징
표현 방식가수 × 밑수^지수 (mantissa × base^exponent)
장점넓은 범위의 값을 표현 가능
단점정확도가 제한적임
연산 속도가 느릴 수 있음
표준
표준IEEE 754
일반적인 정밀도단정도 (32비트)
배정도 (64비트)
구성 요소
부호 비트양수 또는 음수를 나타냄
지수값의 크기를 나타냄
가수값의 정밀도를 나타냄
예시
십진수3.14 × 10^5
이진수1.1001 × 2^-3
기타
관련 항목고정 소수점
로그 스케일

2. 형태

부동소수점 수는 밑(β), 가수(b), 지수(e)를 사용하여 표현한다. 대부분의 컴퓨터에서는 이진법(β=2)을 사용하며, 정규화를 통해 가수부의 첫째 자리가 1이 되도록 한다.[122]

β를 밑으로 하는 k-부동소수점 수 x는 다음과 같은 형태를 가진다.

:x=\pm (.b_1b_2\cdots b_k) \times \beta^e

여기서 \beta \geq 2인 정수이고, bi0\leq b_i \leq \beta -1인 정수이다. (b_1b_2\cdots b_k)를 '''가수부'''라 하며, e는 '''지수부'''라고 한다. 만약 b_1 \neq 0 혹은 b_1=b_2=\cdots =b_k=0이라면, 이 부동소수점 수 x는 '''정규화되었다'''고 한다.

이진법으로 정규화된 부동소수점 수를 나타낸다면, β=2이고, 가수부는 0이나 1의 수로 채워진다. 이때 가수부 첫째 수는 1이다.

:x=\pm (.1b_2\cdots b_k) \times 2^e

수 표현은 숫자를 인코딩하는 방식을 지정하며, 일반적으로 일련의 숫자 문자열로 표시된다. 고정 소수점 시스템에서는 기수점의 위치가 문자열 내에 지정된다. 과학적 표기법에서는 주어진 숫자가 10의 거듭제곱으로 조정되어 특정 범위(일반적으로 1과 10 사이) 내에 속하게 된다. 부동 소수점 표현은 과학적 표기법과 개념적으로 유사하다.

논리적으로 부동 소수점 숫자는 다음으로 구성된다.


  • 주어진 밑에서 주어진 길이의 부호가 있는 (양수 또는 음수 의미) 숫자 문자열. 이 숫자 문자열을 ''가수''라고 한다.[17] 가수의 길이는 숫자를 표현할 수 있는 ''정밀도''를 결정한다.
  • 숫자의 크기를 수정하는 부호가 있는 정수 지수 (''특성'' 또는 ''스케일''이라고도 함).[18]


부동 소수점 숫자의 값을 구하려면, ''가수''에 ''밑''을 ''지수''의 거듭제곱으로 곱한다.

역사적으로 부동 소수점 숫자를 표현하기 위해 여러 숫자 밑이 사용되었으며, 이진수(밑 2)가 가장 일반적이고, 십진 부동 소수점(밑 10)이 그 뒤를 따르며, 16진법 부동 소수점[52][54][13], 8진 부동 소수점[50][54][51][52][12], 4진 부동 소수점[55][54][15], 균형 삼진 부동 소수점[50] 등 다양한 밑이 사용되었다.

부동 소수점 숫자는 유리수이며, 밑은 표현할 수 있는 분수를 결정한다. 예를 들어, 1/5는 이진 밑을 사용하여 부동 소수점 숫자로 정확하게 표현할 수 없지만, 십진 밑을 사용하면 정확하게 표현할 수 있다. 그러나 1/3은 3진법에서는 간단하게 표현 가능하지만 이진수나 십진수로는 정확하게 표현할 수 없다.

0이 아닌 숫자의 가수의 가장 중요한 숫자가 0이 아니어야 하는 경우가 있는데(해당 지수가 최소 지수보다 작을 경우 제외), 이 과정을 ''정규화''라고 한다. 이진 형식의 경우, 이 0이 아닌 숫자는 반드시 1이 되며, 메모리에 표현할 필요가 없어, 형식에 정밀도 비트가 하나 더 있을 수 있다. 이 규칙을 ''숨겨진 비트 규칙''[50]이라고 한다.

컴퓨터에서는 실수를 유한한 비트 수로 표현해야 하므로, 부동소수점 방식을 사용하여 근삿값으로 처리한다. 예를 들어, -1/3은 10진수나 2진수에서 무한 소수가 되지만, 유한 자릿수의 소수로 근삿값을 표기할 수 있다. 2진수의 경우 과학적 표기법을 사용하여 정규화된 수로 표현할 수 있다.

2. 1. 32비트 컴퓨터에서의 부동소수점 방식

32비트 컴퓨터에서는 실수를 표현하기 위해 부동소수점 방식을 사용한다. 이 방식은 다음과 같이 세 부분으로 구성된다.[123]

  • 부호부 (1비트): 숫자가 양수인지 음수인지를 나타낸다. 양수이면 0, 음수이면 1이다.
  • 지수부 (8비트): 8비트로 표시되며, 숫자의 크기를 나타내는 지수를 저장한다.
  • 가수부 (23비트): 숫자의 유효 자릿수를 나타낸다. 가수부는 정규화를 통해 맨 앞 비트가 항상 1이 되도록 조정된다.


예를 들어, 십진수 21.8125를 32비트 부동소수점 수로 변환하는 과정은 다음과 같다.[123]

1. 이진수 변환: 21.8125를 이진수로 변환하면 10101.11012가 된다.

2. 정규화: 이진수를 정규화하면 0.101011101 × 25가 된다.

3. 부동소수점 표현:

  • 부호부는 0 (양수)이다.
  • 지수부는 5를 이진수로 바꾼 후 (101) 8비트로 표현하면 00000101 이 된다.
  • 가수부는 101011101000... 이 된다.

4. 결합: 위 세 부분을 결합하면 32비트 부동소수점 수 (00000010110101110100000000000000)2가 된다.[123]

32비트 부동소수점의 레이아웃은 다음과 같다.

단정밀도 부동소수점 형식
sign: 부호부, exponent: 지수부, fraction: 가수부

2. 2. IEEE의 부동소수점 방식 (IEEE 754)

IEEE 754전기전자공학자협회(IEEE)에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이다.

IEEE 754 부동 소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.



IEEE 754는 부동소수점 수를 부호(sign), 지수(exponent), 가수(mantissa)의 세 부분으로 나누어 표현한다. 일반적으로 다음과 같은 형식을 가진다.

형식부호 (비트)지수 (비트)가수 (비트)총 비트 수지수 바이어스비트 정밀도십진수 정밀도
반정밀도1510161511~3.3
단정밀도18233212724~7.2
배정밀도1115264102353~15.9
x86 확장 정밀도11564801638364~19.2
4배 정밀도11511212816383113~34.0


  • 부호: 0은 양수, 1은 음수를 나타낸다.
  • 지수: 지수에 특정 값(바이어스)을 더해 표현한다. 단정밀도의 경우 지수 바이어스는 127이며, 배정밀도의 경우 1023이다.
  • 가수: 실제 값을 표현하는 부분으로, 정규화 과정을 통해 소수점 왼쪽에 1만 남도록 조정된다. 이진수에서는 항상 1이므로 이 1은 생략하고 나머지 소수점 아래 부분만 저장한다.(숨겨진 비트)


지수는 양수 또는 음수가 될 수 있지만, 이진 형식에서는 고정된 "바이어스"가 더해진 부호 없는 숫자로 저장된다. 모든 0 값은 0과 비정규화 수를 위해, 모든 1 값은 무한대와 NaN을 위해 예약되어 있다. 정규화된 숫자의 지수 범위는 단정밀도의 경우 [-126, 127], 배정밀도의 경우 [-1022, 1023], 4배 정밀도의 경우 [-16382, 16383]이다.

정규화된 가수의 선행 1 비트는 실제로 컴퓨터 데이터에 저장되지 않는데, 이를 "숨겨진" 또는 "암시적" 비트라고 한다. 이로 인해 단정밀도 형식은 실제로 24 비트 정밀도의 가수를, 배정밀도 형식은 53 비트, 4배 정밀도는 113 비트를 가진다.

2. 2. 1. 예시


  • 118.625(십진법)를 IEEE 754(32비트 단정밀도)로 표현하는 과정은 다음과 같다.

  • 음수이므로 부호부는 1이다.
  • 절댓값을 이진법으로 나타내면 1110110.101이 된다.
  • 소수점을 왼쪽으로 이동시켜 왼쪽에 1만 남게 만든다. (1110110.101 = 1.110110101×26). 이를 정규화된 부동소수점 수라고 한다.
  • 가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수만큼 0으로 채워 23비트로 만든다. 결과는 11011010100000000000000이다.
  • 지수는 6이므로, Bias를 더해야 한다. 32비트 IEEE 754 형식에서는 Bias는 127이므로 6 + 127 = 133이 된다. 이진법으로 변환하면 10000101이 된다.


이 결과를 정리해서 표시하면 다음과 같다.[124]

IEEE 754 부동소수점 표현 예시

3. 원리

컴퓨터 프로그래밍이나 전자계산기 등에서 밑수가 10인 경우 로마자 E 또는 e를 사용하여 함수 형태로 표시하기도 하는데, -0.4는 -0.04E+1 또는 -0.04e+1이 되며, 정규화하면 -4E-1 또는 -4e-1로 쓴다.[122] 만약 사용할 밑수를 미리 정해 놓는다면 가수와 지수만으로 실수를 표현할 수 있다. 예를 들어, 앞의 보기에서 밑수를 10으로 고정한다면 실수 -0.4는 가수 -4와 지수 -1의 조합으로 나타낼 수 있다. 보다 정형화된 형태로는 가수부와 지수부의 자릿수를 고정할 수 있는데, 만약 밑수는 10이고 부호는 따로 표시하며, 가수부 5자리, 지수부 3자리로 하는 형식이라면 앞의 값 -0.4는 '부호 -, 가수 40000, 지수 -005'로 나타낼 수 있다.

부동소수점 표현 방식은 수를 (가수)×(밑수)(지수)와 같이 유효숫자를 사용한 곱셈 형태로 표현한다. 예를 들어, -0.4를 밑수가 10인 부동소수점으로 나타내면 -0.04×101이 되며, 밑수가 2이면 -0.8×2-1가 된다. 이처럼 가수의 첫째 자리가 밑수보다 작은 한자리 자연수가 되도록 바꾸는 것을 정규화라고 한다. 예를 들어, -0.8×2-1을 정규화하면 -1.6×2-2이 된다.

이진법에서는 정규화 결과 가수의 첫째 자리가 항상 1이 되므로, 이 표시는 생략할 수 있다.[122] 따라서 고정된 형식에서 가수부에 1자리를 더 표시할 수 있게 되므로, 처리할 수 있는 유효숫자가 1자리만큼 늘어난다. 앞의 예 1.6×2-2를 이 방식으로 표현하면 '부호 +, 가수 60000, 지수 -002'가 된다.

지수부에는 따로 부호 비트가 없기 때문에 음수 지수를 처리하기 위해 보통 바이어스 표현법을 사용한다. 할당된 자릿수로 표현 가능한 전체 영역을 반으로 나누어, 작은 영역에는 음수값 및 0, 큰 영역에는 양수값이 차례대로 1:1 대응되도록 한다. 예를 들어, 지수부를 8비트로 표현한다면 모두 256가지 수를 나타낼 수 있는데, 이것을 반으로 나누어 음수 127개와 0, 양수 128개를 차례대로 대응시킨다. 따라서 비트열 00000000은 지수 -127을 나타내고, 01111111은 지수 0, 11111111은 지수 128을 나타낸다. 일반적으로 지수부가 n비트일 때 (2n / 2 - 1 = 2n-1 - 1)을 지수 값에 더하며, 이것을 바이어스 상수라고 한다. (다만, 지수부의 모든 자리가 모두 0 또는 1인 경우는 각각 0 또는 무한대를 나타내는 등 종종 특수한 목적으로 예약되어 있다.) 가수부에서는 정규화 결과 유효숫자의 첫째 자리는 언제나 1이므로 표시하지 않고, 소수 부분만 표현한다.

4. 정확도 문제

부동 소수점으로 표현한 수는 실수를 정확하게 표현하지 못하고, 부동 소수점 연산 역시 실제 수학적 연산을 정확하게 표현하지 못한다.[125]

예를 들어, 0.1과 0.01은 24비트 단정밀도 표현으로 정확하게 표현할 수 없다. 십진수 0.1은 이진수로 표현하면 다음과 같다.

:정확히 0.1000000014901161193847656256

이 수를 제곱하면 다음과 같다.

:정확히 0.010000000298023226097399174250313080847263336181640625

단정밀도 부동 소수점 (반올림 있음) 하드웨어에서 제곱하면 다음과 같다.

:정확히 0.010000000707805156707763671875

하지만 0.01과 가장 가까운 표현 가능한 실수는 다음과 같다.

:정확히 0.009999999776482582092285156250

또한, π (및 π/2)를 표현하지 못하므로 tan(π/2)가 무한대가 되지 않고 오버플로(overflow)도 생기지 않는다. 따라서 일반적인 부동소수점 하드웨어에서는 tan(π/2)를 계산하는 것이 불가능하다. C 언어에서 다음 계산 결과는 16331239353195370.0 이 된다.

```c

double pi = 3.1415926535897932384626433832795;

double z = tan(pi/2.0);

```

단정밀도에서는 (tanf 함수를 이용하여), −22877332.0 라는 결과를 얻는다.

같은 이유로 sin(π)는 0이 되지 않고 배정밀도에서 약 0.1225, 단정밀도에서 −0.8742가 된다.[125]

부동소수점 덧셈과 곱셈은 교환법칙은 성립하지만, 결합법칙이 항상 성립하지 않는다. 즉, (''a'' + ''b'') + ''c'' 가 항상 ''a'' + (''b'' + ''c'') 와 같지 않다.

예를 들어 7자리 부동소수점(Float 7) 10진수 계산을 할 때:


  • 1234.567 + 45.67846 = 1280.245
  • 1280.245 + 0.0004 = 1280.245

그러나

  • 45.67846 + 0.0004 = 45.67886
  • 45.67886 + 1234.567 = 1280.246


또한 분배법칙도 항상 성립하지 않는다. 즉, (''a'' + ''b'') × ''c'' 은 ''a'' × ''c'' + ''b'' × ''c''과 다를 수 있다:

  • 1234.567 × 3.333333 = 4115.223
  • 1.234567 × 3.333333 = 4.115223
  • 4115.223 + 4.115223 = 4119.338

그러나

  • 1234.567 + 1.234567 = 1235.802
  • 1235.802 × 3.333333 = 4119.340


π와 0.1을 정확하게 표현하지 못하는 문제와 다른 약간의 부정확성이 다음과 같은 현상을 일으킨다.

  • 소거: 거의 같은 두 값을 빼면 정확성을 매우 많이 잃게 된다. 이 문제는 가장 일반적이고 심각한 정확도 문제이다.
  • 정수로의 변환 문제: (63.0/9.0)을 정수로 변환하면 7이 되지만 (0.63/0.09)는 6이 된다. 이는 일반적으로 반올림 대신 버림을 하기 때문이다.
  • 제한된 지수부: 결과값이 오버플로되어 무한대값이 되거나 언더플로되어 비정규 값 또는 0이 될 수 있다. 비정규 값이 되면 유효숫자를 완전히 잃어버린다.
  • 나눗셈이 안전한지 검사하는데 문제가 생김: 제수(나눗수)가 0이 아님을 검사하는 것이 나눗셈이 오버플로되고 무한대값이 되지 않는 걸 보장하지 않는다.
  • 같음을 검사하는데 문제가 생김: 수학적으로 같은 계산결과가 나오는 두 계산 순서가 다른 부동소수점 값을 만들어낼 수 있다. 프로그래머는 어느정도의 허용 오차를 가지고 비교를 수행하지만, 그렇다고 해서 문제가 완전히 없어지지 않는다.

5. 규격

IEEE 754전기전자공학자협회(IEEE)에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이다.[123] 실제 사용되고 있는 부동 소수점 방식은 대부분 IEEE 754 표준을 따른다.[126] 이 규격에서는 실수를 32비트로 처리하는 단정밀도(single precision)에서는 부호 1비트, 지수부 8비트, 가수부 23비트를 사용하며, 64비트로 처리하는 배정밀도(double precision)에서는 부호 1비트, 지수부 11비트, 가수부 52비트를 사용한다. 4배 정밀도(quadruple precision)에서는 128비트로 부호 1비트, 지수부 15비트, 가수부 112비트를 사용한다.[126] 16비트로 처리하는 반정밀도(half precsion)에서는 부호 1비트, 지수부 5비트, 가수부 10비트를 사용한다.

과거의 마이크로소프트 제품은 자체 규격인 MBF(Microsoft Binary Format)를 사용했다. 이 형식에서는 배정밀도에서 부호 1비트, 지수 8비트, 가수 55비트를 사용하여 상대적으로 표현 범위가 좁은 대신에 유효숫자가 많으므로 보다 정밀한 값을 표현할 수 있다. 다만 실제 연산 과정에서는 IEEE 754 규격이 80비트 연산을 수행하므로, 연산 자체는 IEEE 754가 정밀하다.

IEEE 754 형식을 파생한 부동 소수점 형식으로, 엔비디아(Nvidia)는 GPU 제품 블랙웰(2024년 3월 발표)에서 AI용을 상정하여 E2M1 형식을 도입했다. E2M1은 부호 비트 1비트, 지수부 2비트, 가수부 1비트로 구성되며, 무한대와 NaN은 표현할 수 없다.[100][101]

6. 부동소수점 연산

부동소수점 덧셈과 뺄셈은 지수를 맞춘 후 가수부를 더하거나 빼는 방식으로 수행된다. 곱셈은 가수를 곱하고 지수를 더하는 방식으로, 나눗셈은 가수를 나누고 지수를 빼는 방식으로 수행된다.[34]

예를 들어, 123456.7 + 101.7654를 십진 부동소수점으로 계산하는 과정은 다음과 같다.

:123456.7 = 1.234567 × 105

:101.7654 = 1.017654 × 102 = 0.001017654 × 105

따라서,

:123456.7 + 101.7654 = (1.234567 + 0.001017654) × 105 = 1.235584654 × 105

이는 정확한 합(123558.4654)이며, 필요에 따라 7자리로 반올림하고 정규화하면 1.235585 × 105 (123558.5)가 된다. 이 과정에서 두 번째 피연산자의 마지막 세 자리(654)가 손실되는 반올림 오차가 발생한다. 극단적인 경우, 두 수의 합이 둘 중 하나와 같아질 수도 있다.

바이너리 덧셈/뺄셈에서는 ''가드'' 비트, ''반올림'' 비트, ''스티키'' 비트를 활용하여 정확한 반올림을 보장할 수 있다.[34][78]

파멸적 상쇄는 거의 같은 두 수의 근사값을 뺄 때 발생한다. 예를 들어 123457.1467과 123456.659의 근사값을 빼면 정확한 결과는 4.877000 × 10-1이지만, 부동소수점 연산 결과는 4.000000 × 10-1로 20% 이상 차이가 난다. 심한 경우 모든 유효 자릿수가 손실될 수 있다.[34][62]

곱셈은 가수를 곱하고 지수를 더하며, 나눗셈은 피제수의 지수에서 제수의 지수를 빼고 피제수의 가수를 제수의 가수로 나눈다. 곱셈/나눗셈은 상쇄나 흡수 문제는 없지만, 연산이 반복되면 작은 오차가 누적될 수 있다.[34] (부스 곱셈 알고리즘, 나눗셈 알고리즘 참조).[6]

6. 1. 예외 처리

IEEE 754 표준은 부동소수점 연산에서 발생할 수 있는 예외 상황을 처리하는 방법을 정의한다. 이러한 예외에는 오버플로, 언더플로, 0으로 나누기, 무효 연산 등이 있다.

IEEE 754는 다음과 같은 5가지 산술 예외를 정의하고, 상태 플래그("sticky 비트")에 기록하도록 규정한다.

  • 부정확: 반올림된 결과가 정확한 결과와 다를 때 설정된다.
  • 언더플로: 반올림된 값이 매우 작고 부정확할 때 설정되며, 0을 포함한 비정규화 수 값을 반환한다.
  • 오버플로: 반올림된 값의 절댓값이 너무 커서 표현할 수 없을 때 설정된다. 무한대 또는 최대 유한 값이 반환된다.
  • 0으로 나누기: 유한 피연산자에 대해 결과가 무한대일 때 설정되며, +∞ 또는 −∞를 반환한다.
  • 무효: 유한 또는 무한 결과를 반환할 수 없을 때(예: 0/0, sqrt(-1)) 설정되며, 조용한 NaN을 반환한다.


각 예외에 대한 기본 반환 값은 대부분의 경우에 올바른 결과를 제공하도록 설계되어, 대부분의 코드에서 예외를 무시할 수 있도록 한다. 예를 들어, '부정확'은 정확하게 반올림된 결과를, '언더플로'는 매우 작은 값을 반환한다.[28] '0으로 나누기'는 무한대를 반환하고, 이는 유한한 결과를 내거나 '무효' 예외를 발생시키므로 무시할 수 있다.[29]

'오버플로' 및 '무효' 예외는 일반적으로 무시할 수 없지만, 오류를 나타내는 것은 아닐 수 있다. 예를 들어, 근 찾기 루틴에서 NaN과 '무효' 예외 플래그는 무시될 수 있다.[28]

원래 IEEE 754 표준은 예외 플래그 비트 처리를 위한 연산을 권장하지 않았지만, 이후 프로그래밍 언어 표준(C99/C11, Fortran 등)은 상태 플래그 비트에 접근하고 변경하는 방법을 제공하도록 업데이트되었다. IEEE 754 표준의 2008년 버전은 산술 플래그 비트 처리 연산을 명시하고 있다.

부동소수점 계산에서 발생할 수 있는 문제점은 다음과 같다.

  • 오버플로/언더플로: 연산 결과가 표현 가능한 범위를 벗어나는 경우이다. 오버플로는 최댓값을 초과하는 경우, 언더플로는 절댓값이 최솟값보다 작은 경우를 의미한다.
  • 자릿수 감소: 절댓값이 비슷한 수끼리 더하거나 뺄 때, 유효 숫자가 줄어드는 현상이다. 자세한 내용은 자릿수 감소 문서를 참고
  • 정보 손실: 매우 큰 수와 매우 작은 수를 더하거나 뺄 때, 작은 수의 정보가 손실되는 현상이다. 정보 손실문서 참고.
  • 누적 손실: 정보 손실이 반복적으로 발생하는 경우이다.
  • 반올림 오차: 유한한 자릿수로 인해 발생하는 오차이다.

7. 대안

임의 정밀도 연산과 기존의 지수부와 가수부를 모두 고정 길이로 하는 형식의 중간이라고 할 수 있는 방식이 몇 가지 제안되었다. 절대값이 1에 가까운 값에서는 지수부의 자릿수를 짧게 하고, 가수부의 자릿수를 많이 취하여 자주 사용되는 값을 정밀하게 표현한다. 절대값이 극단적으로 큰 값이나 작은 값에는 정밀도와 교환하여 지수부의 자릿수를 늘리는 것으로 대응한다. 이러한 방식을 제안한 문헌에서는 응용 프로그램으로, 통상적인 부동 소수점 계산에는 지수가 너무 커서 적합하지 않다고 여겨지는 :en:Graeffe's method를 잘 다룰 수 있었다는 예가 제시되었다.

8. 역사


  • -는 1914년에 해석 기관을 기반으로 한 부동 소수점 분석을 발표했다.[2] 그는 숫자가 ''n'' x 10m과 같은 지수 형식으로 저장될 것이라고 설명했다.[3]


1938년, 콘라트 추제는 최초의 이진, 프로그래밍 가능한 기계식 컴퓨터인 Z1을 완성했다.[20] Z1은 24비트 이진 부동 소수점 숫자 표현을 사용했다.[21] 1941년에 완성된 Z3은 양수 및 음수 무한대에 대한 표현을 모두 가지고 있었고, 무한대 연산을 정의했다. 추제는 또한 IEEE 표준의 기능을 40년 전에 예상하면서 부동 소수점 연산을 제안했지만 완성하지는 못했다.[22]

부동 소수점 하드웨어를 갖춘 최초의 ''상업용'' 컴퓨터는 추제의 Z4 컴퓨터였다. 1946년, 벨 연구소는 Model V를 도입했는데, 이 컴퓨터는 십진 부동 소수점 숫자를 구현했다.[23] 파일럿 ACE는 이진 부동 소수점 연산을 사용하며, 1950년 영국 국립 물리 연구소에서 가동되었다.

1954년에 대량 생산된 IBM 704는 지수 바이어스를 사용하기 시작했다. 1989년 인텔 i486이 출시되면서 ''범용'' 개인용 컴퓨터가 하드웨어로 부동 소수점 기능을 표준 기능으로 갖게 되었다.

UNIVAC 1100/2200 시리즈는 두 가지 부동 소수점 표현을 지원했다.

표현구성
단정밀도36비트, 1비트 부호, 8비트 지수 및 27비트 유효 숫자
배정밀도72비트, 1비트 부호, 11비트 지수 및 60비트 유효 숫자



IBM 7094는 단정밀도 및 배정밀도 표현을 지원했지만 UNIVAC의 표현과는 관련이 없었다. 1964년, IBM은 16진 부동 소수점 표현을 System/360 메인프레임에 도입했다.

초기에는 컴퓨터에서 부동 소수점 숫자에 대해 다양한 표현을 사용했다. 1980년대 초반, 32비트(또는 64비트) 워드가 보편화되면서 IEEE 754 표준이 만들어졌다.

1989년, 윌리엄 카한IEEE 754 표준 제안의 주요 설계자라는 공로로 튜링상을 수상했다.[27]

9. 부동 소수점 형식

IEEE 754 표준 형식 외에도 특정 목적에 맞게 다양한 부동 소수점 형식이 사용되거나 사용되어 왔다.


  • Bfloat16 형식은 IEEE 754 반정밀도 형식과 같은 16비트를 사용하지만, 지수부에 8비트를 할당하여 IEEE 754 단정밀도와 비슷한 범위를 가진다. 정밀도는 7비트로 줄어드는데, 이는 기계 학습 모델 훈련과 같이 정밀도보다 범위가 중요한 경우에 유용하다.
  • TensorFloat-32[61] 형식은 Bfloat16의 8비트 지수와 반정밀도 형식의 10비트 가수부를 결합하여 19비트 크기를 가진다. Nvidia에서 도입하였으며, Nvidia Ampere 아키텍처 기반 GPU의 Tensor Core에서 하드웨어 지원을 제공한다.
  • 호퍼 아키텍처 GPU는 FP8 형식을 제공한다. 반정밀도와 동일한 범위를 갖는 E5M2 형식과, 정밀도는 높지만 범위가 좁은 E4M3 형식이 있다.[68][69]


Bfloat16, TensorFloat-32 및 두 FP8 형식과 IEEE 754 반정밀도 및 단정밀도 형식 비교
유형부호지수후행 가수 필드총 비트
FP8 (E4M3)1438
FP8 (E5M2)1528
반정밀도151016
Bfloat1618716
TensorFloat-32181019
단정밀도182332


  • IBM 방식은 System/360에서 도입된 이후 메인프레임에서 사용된 방식이다. 지수부가 2의 이 아닌 16의 멱을 나타내는 것이 특징이다.

9. 1. 지수부와 가수부를 가변으로 하는 방식

임의 정밀도 연산과 기존의 지수부와 가수부를 모두 고정 길이로 하는 형식의 중간 형태인 방식이 몇 가지 제안되었다. 이 방식은 절대값이 1에 가까운 값에서는 지수부 자릿수를 줄이고 가수부 자릿수를 늘려 정밀도를 높인다. 반대로 절대값이 매우 크거나 작은 값에서는 지수부 자릿수를 늘려 표현 범위를 넓힌다. 이러한 방식을 제안한 문헌에서는 응용 프로그램 예시로, 통상적인 부동소수점 계산에는 지수가 너무 커서 적합하지 않다고 여겨지는 :en:Graeffe's method를 잘 다룰 수 있다는 점을 제시했다.[104][105]

송이 마사카즈와 이리 마사오가 제안한 방식은 부호와 절대값에 의한 표현법을 사용한다. 논문에 제시된 예시는 64비트 배정밀도 부동소수점 수로, 가수부 길이 n을 나타내는 정보 6비트, (부호부를 포함하는) m비트의 지수부, n비트의 가수부(m+n = 58)로 구성된다. 이들은 오버플로를 방지하기 위한 더 큰 수나 더 작은 수의 표현, 무한대 등 예외적인 값을 포함하는 산술(IEEE 표준의 ±∞나 -0의 취급과 유사하지만 더 확장됨)도 제안했다.

하마다 호즈미가 제안한 방식은[106] Universal Representation of Real numbers의 약자로 URR이라고 명명되었다[107]. 이 방식은 −∞ ~ 0 ~ ∞ 구간을 분할하여 이진법 표현에 대응시키는 것이 기본 발상이다. "부호와 절대값" 형식이 아닌, 부동소수점 표현으로는 드문 2의 보수 형태를 취한다.

URR에서 구간 분할 및 이진 표현 대응은 다음과 같다.

  • 100 = −∞
  • 101 = −2
  • 110 = −1
  • 111 = −0.5
  • 000 = 0
  • 001 = 0.5
  • 010 = 1
  • 011 = 2 ~ ∞


±1 전후는 구간 양쪽 끝의 비가 2이므로, 지수부 표현은 끝났다고 간주한다. 나머지 자릿수는 가수부처럼 다룬다(±1 전후는 이후 1/2로 등차 분할한다). 분할은 다음과 같이 계속된다.

  • 1000 = −∞
  • 1001 = −4
  • 1010 = −2
  • 1011 = −1.5
  • 1100 = −1
  • 1101 = −0.75
  • 1110 = −0.5
  • 1111 = −0.25
  • 0000 = 0
  • 0001 = 0.25
  • 0010 = 0.5
  • 0011 = 0.75
  • 0100 = 1
  • 0101 = 1.5
  • 0110 = 2
  • 0111 = 4 ~ ∞


이후는 부호 비트가 0인 0 ~ 0.5와 2 ~ ∞ 구간으로 한정하여 설명한다.

  • 0 00000 = 0
  • 0 00001 = 0.00390625 (1/256)
  • 0 00010 = 0.0625 (1/16)
  • 0 00100 = 0.25 (1/4)
  • 0 01000 = 0.5 (1/2)
  • 0 11000 = 2
  • 0 11100 = 4
  • 0 11110 = 16
  • 0 11111 = 256 ~ ∞


여기서, 2 = 220, 4 = 221, 16 = 222, 256 = 223이다. 이처럼 0이나 ±∞를 포함하는 구간은 "이중 지수 분할"한다.

  • 0 000000 = 0
  • 0 000001 = 0.0000152587890625 (1/65536)
  • 0 000010 = 0.00390625 (1/256)
  • 0 000011 = 0.015625 (1/64)
  • 0 000100 = 0.0625 (1/16)
  • 0 000110 = 0.125 (1/8)
  • 0 001000 = 0.25 (1/4)
  • 0 111000 = 4 (22)
  • 0 111010 = 8 (23,3=(2+4)/2)
  • 0 111100 = 16 (24)
  • 0 111101 = 64 (26,6=(4+8)/2)
  • 0 111110 = 256 (28)
  • 0 111111 = 65536 ~ ∞


이처럼 구간 양쪽 끝의 비가 2보다 클 경우 "등비 분할"한다.

이상의 결과로, 지수부가 0 이상인 경우는 다음과 같다.

  • "0 10" = 0
  • "0 11(1이 n개)0(n개의 비트열 Bn)" = 1Bn (감마 부호의 자릿수 출력, 이후 "1"을 비트 반전)


지수부가 0 미만인 경우는 다음과 같다.

  • "0 01" = "0 10"의 부호 비트 이외 비트 반전 = 2진수 "0" 비트 반전 = −1
  • "0 00(0이 n개)1(n개의 비트열 Bn을 비트 반전)" = "0 11(1이 n개)0(n개의 비트열 Bn)"의 부호 비트 이외 비트 반전 = 2진수 "1Bn" 비트 반전 = −(1Bn)−1


즉, 비트 반전하여 0 이상으로 만든 후 위 방법으로 지수부를 구하고, 다시 비트 반전하여 원래 지수부를 얻는다. 결과적으로 음수로 확장된 감마 부호에 의해 자신의 길이를 포함하는 지수부와 나머지 가수부로 구성되는 표현을 얻는다.

URR 방식의 장점은 다음과 같다.

  • 비트 표현을 2의 보수로 해석해도 값·절대값의 대소 관계가 일치한다.
  • 단정밀도, 배정밀도, 4배 정밀도 및 일부 비트를 데이터형 판별 등에 사용하는 7비트, 30비트 등 임의 비트 길이 표현과의 상호 변환·반올림 연산이 최하위 비트 추가/삭제만으로 가능하다.
  • 대소 관계 비교 연산, 부호 반전에 필요한 회로 및 알고리즘이 정수와 동일하다.
  • 1에 가까울수록 자릿수 대부분이 가수부가 되어 정밀도가 높다.


단점은 다음과 같다.

  • 정밀도가 변하므로, 기존의 정밀도 고정을 전제로 한 방식에 수정이 필요할 수 있다.
  • −∞를 제외한 모든 비트 표현에 부동소수점 수 의미가 부여되므로, 예외 값 표현 방법을 별도로 고려해야 한다.


하마다는 1000...을 부호 없는 ∞(사영 모드[108]용, 부호 없는 0에 대응)로 하고, 표현 가능한 최대/최소 절대값을 갖는 값을 구체적인 값 대신 ±∞와 ±0 표현(0은 일반적인 0을 부호 없는 0, 부호 있는 +0/-0은 무한대로 나눈 결과 등 예외 값)으로 하는 방법을 제안한다.

이 표현법은 1981년에 처음 등장했지만,[109] 1983년 개량판이 제안되었으므로[110] 개량판을 참조해야 한다.[111]

이후 URR에 대한 구현 보고[112][113] 및 개선 제안[114][115][116][117][118][119] 등이 있다.

최근에는 하마다 방식과 유사한 Posit 방식이 제안되었다.

  • [http://www.johngustafson.net/pdfs/BeatingFloatingPoint.pdf John L. Gustafson and Isaac Yonemoto: "Beating Floating Point at its Own Game: Posit Arithmetic", DOI:10.14529/jsfi170206]
  • [https://news.mynavi.jp/techplus/article/20190723-863757/ 「ISC 2019 - 디프 러닝에 최적의 수치 표현 Posit」(마이내비 뉴스 기사, 2019년 7월 23일)]

참조

[1] 서적 Floating-Point Computation https://archive.org/[...] Prentice-Hall 1974
[2] 간행물 Automática: Complemento de la Teoría de las Máquinas https://quickclick.e[...] 1914-11-19
[3] 서적 Numbers and Computers https://books.google[...] Springer 2017
[4] 간행물 Digital Computers, History of Origins https://dl.acm.org/d[...] 2003-01
[5] 문서 Computer hardware does not necessarily compute the exact value; it simply has to produce the equivalent rounded result as though it had computed the infinitely precise result.
[6] 문서 The enormous complexity of modern division algorithm once led to a famous error. An early version of the Intel Pentium chip was shipped with a division instruction that, on rare occasions, gave slightly incorrect results. Many computers had been shipped before the error was discovered. Until the defective computers were replaced, patched versions of compilers were developed that could avoid the failing cases. See Pentium FDIV bug.
[7] 문서 But an attempted computation of cos(π) yields −1 exactly. Since the derivative is nearly zero near π, the effect of the inaccuracy in the argument is far smaller than the spacing of the floating-point numbers around −1, and the rounded result is exact.
[8] 문서 William Kahan notes: "Except in extremely uncommon situations, extra-precise arithmetic generally attenuates risks due to roundoff at far less cost than the price of a competent error-analyst."
[9] 문서 The Taylor expansion of this function demonstrates that it is well-conditioned near 1: A(x) = 1 − (x−1)/2 + (x−1)^2/12 − (x−1)^4/720 + (x−1)^6/30240 − (x−1)^8/1209600 + ... for |x−1| < π.
[10] 문서 If long double is IEEE quad precision then full double precision is retained; if long double is IEEE double extended precision then additional, but not full precision is retained.
[11] 문서 The equivalence of the two forms can be verified algebraically by noting that the denominator of the fraction in the second form is the conjugate of the numerator of the first. By multiplying the top and bottom of the first expression by this conjugate, one obtains the second expression.
[12] 문서 Octal (base-8) floating-point arithmetic is used in the Ferranti Atlas (1962), Burroughs B5500 (1964), Burroughs B5700 (1971), Burroughs B6700 (1971) and Burroughs B7700 (1972) computers.
[13] 문서 Hexadecimal (base-16) floating-point arithmetic is used in the IBM System 360 (1964) and 370 (1970) as well as various newer IBM machines, in the RCA Spectra 70 (1964), the Siemens 4004 (1965), 7.700 (1974), 7.800, 7.500 (1977) series mainframes and successors, the Unidata 7.000 series mainframes, the Manchester MU5 (1972), the Heterogeneous Element Processor (HEP) (1982) computers, and in 360/370-compatible mainframe families made by Fujitsu, Amdahl and Hitachi. It is also used in the Illinois ILLIAC III (1966), Data General Eclipse S/200 (ca. 1974), Gould Powernode 9080 (1980s), Interdata 8/32 (1970s), the SEL Systems 85 and 86 as well as the SDS Sigma 5 (1967), 7 (1966) and Xerox Sigma 9 (1970).
[14] 문서 Base-65536 floating-point arithmetic is used in the MANIAC II (1956) computer.
[15] 문서 Quaternary (base-4) floating-point arithmetic is used in the Illinois ILLIAC II (1962) computer. It is also used in the Digital Field System DFS IV and V high-resolution site survey systems.
[16] 문서 Base-256 floating-point arithmetic is used in the Rice Institute R1 computer (since 1958).
[17] 문서 The significand of a floating-point number is also called mantissa by some authors—not to be confused with the mantissa of a logarithm. Somewhat vague, terms such as coefficient or argument are also used by some. The usage of the term fraction by some authors is potentially misleading as well. The term characteristic (as used e.g. by CDC) is ambiguous, as it was historically also used to specify some form of exponent of floating-point numbers.
[18] 문서 The exponent of a floating-point number is sometimes also referred to as scale. The term characteristic (for biased exponent, exponent bias, or excess n representation) is ambiguous, as it was historically also used to specify the significand of floating-point numbers.
[19] 서적 The Scientist and Engineer's Guide to Digital Signal Processing California Technical Pub 2012-12-31
[20] 학술지 Konrad Zuse's Legacy: The Architecture of the Z1 and Z3 http://ed-thelen.org[...] 2022-07-03
[21] arXiv The Z1: Architecture and Algorithms of Konrad Zuse's First Computer 2014-06-07
[22] 웹사이트 The Baleful Effect of Computer Languages and Benchmarks upon Applied Mathematics, Physics and Chemistry. John von Neumann Lecture https://people.eecs.[...] 1997-07-15
[23] 서적 The Origins of Digital Computers: Selected Papers Springer-Verlag 1982
[24] 웹사이트 How Java's floating-point hurts everyone everywhere https://people.eecs.[...] 2001
[25] 웹사이트 On the Cost of Floating-Point Computation Without Extra-Precise Arithmetic https://people.eecs.[...] 2004-11-20
[26] 웹사이트 How Futile are Mindless Assessments of Roundoff in Floating-Point Computation? https://people.eecs.[...] 2006-01-11
[27] 웹사이트 An Interview with the Old Man of Floating-Point https://people.eecs.[...] 1998-02-20
[28] 웹사이트 Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic https://people.eecs.[...] 1997-10-01
[29] 서적 Intel 64 and IA-32 Architectures Software Developers' Manuals
[30] 서적 Accuracy and Stability of Numerical Algorithms https://books.google[...] Society for Industrial and Applied Mathematics (SIAM) 2002
[31] 웹사이트 openEXR http://www.openexr.c[...] openEXR
[32] 웹사이트 Technical Introduction to OpenEXR – The half Data Type https://openexr.com/[...] openEXR
[33] 웹사이트 IEEE-754 Analysis https://christopherv[...]
[34] 학술지 What Every Computer Scientist Should Know About Floating-Point Arithmetic 1991-03
[35] 학술지 You're Going To Have To Think! http://accu.org/var/[...] 2010-10
[36] 웹사이트 Patriot missile defense, Software problem led to system failure at Dharhan, Saudi Arabia http://www.gao.gov/p[...] US Government Accounting Office
[37] 논문 Roundoff Error and the Patriot Missile https://www-users.cs[...] 1992-07-01
[38] 서적 Encyclopedia of Computer Science https://books.google[...] Wiley 2003-09-08
[39] 서적 Accuracy and reliability in scientific computing https://books.google[...] Society for Industrial and Applied Mathematics (SIAM) 2005-01-01
[40] Keynote Address Floating-Point Arithmetic Besieged by "Business Decisions" https://people.eecs.[...] 2005-07-15
[41] 서적 Writing Scientific Software: A Guide to Good Style https://books.google[...] Cambridge University Press 2006-09-07
[42] 간행물 Desperately Needed Remedies for the Undebuggability of Large Floating-Point Computations in Science and Engineering https://people.eecs.[...] 2011-08-03
[43] 웹사이트 Why do we need a floating-point arithmetic standard? https://people.eecs.[...] 1981-02-12
[44] 웹사이트 Lecture notes of System Support for Scientific Computation http://www.cims.nyu.[...] 2001-06-04
[45] 웹사이트 General Decimal Arithmetic https://speleotrove.[...] Speleotrove.com
[46] 웹사이트 Marketing versus Mathematics https://people.eecs.[...] 2000-08-27
[47] 논문 Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates 1997-01-01
[48] 웹사이트 perlfaq4 / Why is int() broken? https://perldoc.perl[...] perldoc.perl.org 2006-01-01
[49] 웹사이트 Roundoff Degrades an Idealized Cantilever https://people.eecs.[...] 1997-07-03
[50] 서적 Handbook of Floating-Point Arithmetic https://books.google[...] Birkhäuser 2010-01-01
[51] 웹사이트 The Decimal Floating-Point Standard http://www.quadibloc[...] 2018-01-01
[52] 웹사이트 Rechnerarithmetik: Fest- und Gleitkommasysteme https://users.fmi.un[...] Friedrich-Schiller-Universität Jena 2008-01-01
[53] 웹사이트 MANIAC II http://bitsavers.org[...] Los Alamos Scientific Laboratory of the University of California 1957-01-30
[54] 서적 The Mathematical-Function Computation Handbook - Programming Using the MathCW Portable Software Library Springer International Publishing AG 2017-08-22
[55] 서적 High Resolution Site Surveys CRC Press 2000-12-07
[56] 웹사이트 IEEE Floating-Point Representation https://learn.micros[...] 2021-08-03
[57] 웹사이트 Using the GNU Compiler Collection, i386 and x86-64 Options https://gcc.gnu.org/[...]
[58] 웹사이트 long double (GCC specific) and __float128 https://stackoverflo[...]
[59] 웹사이트 Procedure Call Standard for the ARM 64-bit Architecture (AArch64) http://infocenter.ar[...] 2013-05-22
[60] 웹사이트 ARM Compiler toolchain Compiler Reference, Version 5.03 http://infocenter.ar[...] 2013-01-01
[61] 웹사이트 TensorFloat-32 in the A100 GPU Accelerates AI Training, HPC up to 20x https://blogs.nvidia[...] 2020-05-14
[62] 특허 Floating decimal point arithmetic control means for calculator
[63] 웹사이트 PEP 485 -- A Function for testing approximate equality https://www.python.o[...]
[64] 서적 ISO/IEC 9899:1999 - Programming languages - C Iso.org
[65] 웹사이트 IEEE vs. Microsoft Binary Format; Rounding Issues (Complete) https://www.betaarch[...] Microsoft 2006-11-21
[66] 웹사이트 Create your own Version of Microsoft BASIC for 6502 http://www.pagetable[...] pagetable.com 2008-10-20
[67] TI1431C.txt Converting between Microsoft Binary and IEEE formats https://community.em[...] Embarcadero USA / Inprise (originally: Borland) 1998-07-02
[68] 웹사이트 NVIDIA Hopper Architecture In-Depth https://developer.nv[...] 2022-03-22
[69] 논문 FP8 Formats for Deep Learning 2022-09-12
[70] 기술보고서 Correctly Rounded Binary-Decimal and Decimal-Binary Conversions 1990-01-01
[71] conference Printing floating-point numbers quickly and accurately with integers https://www.cs.tufts[...] 2010
[72] 웹사이트 Added Grisu3 algorithm support for double.ToString(). by mazong1123 · Pull Request #14646 · dotnet/coreclr https://github.com/d[...]
[73] journal Ryū: fast float-to-string conversion 2018-12-02
[74] 웹사이트 The Schubfach way to render doubles https://drive.google[...]
[75] 웹사이트 abolz/Drachennest https://github.com/a[...] 2022-11-10
[76] 웹사이트 google/double-conversion https://github.com/g[...] 2020-09-21
[77] journal Number parsing at a gigabyte per second 2021-03-22
[78] book Computer Organization and Design, The Hardware/Software Interface Elsevier 2014
[79] 웹사이트 Auto-Vectorization in LLVM https://llvm.org/doc[...]
[80] 웹사이트 FloatingPointMath https://gcc.gnu.org/[...]
[81] 웹사이트 55522 – -funsafe-math-optimizations is unexpectedly harmful, especially w/ -shared https://gcc.gnu.org/[...]
[82] 웹사이트 Code Gen Options (The GNU Fortran Compiler) https://gcc.gnu.org/[...]
[83] 웹사이트 Bug in zheevd · Issue #43 · Reference-LAPACK/lapack https://github.com/R[...]
[84] conference Icing: Supporting Fast-Math Style Optimizations in a Verified Compiler 2019
[85] book コンピュータの構成と設計 第5版 上 日経BP
[86] 웹사이트 bfloat16 の数値形式 https://cloud.google[...] null
[87] 웹사이트 Arm A profile architecture update 2019 - Processors blog - Processors - Arm Community https://community.ar[...]
[88] 웹사이트 FP8 Formats for Deep Learning https://arxiv.org/ab[...] null
[89] 웹사이트 OCP 8-bit Floating Point Specification (OFP8) Revision 1.0 https://www.opencomp[...] null
[90] 웹사이트 ArmがAI開発の促進に向け米国大手テック企業との戦略的パートナーシップを発表 https://monoist.itme[...] null
[91] 웹사이트 P3109/Public: materials available to the public https://github.com/P[...] null
[92] 웹사이트 Habana® Gaudi2® AI Processor for Deep Learning Gets Even Better https://www.intel.co[...] null
[93] 웹사이트 NVIDIA Hopper Architecture In-Depth | NVIDIA Technical Blog https://developer.nv[...]
[94] 웹사이트 AMD Instinct™ MI300 Series Accelerators https://www.amd.com/[...] null
[95] 웹사이트 AMD Versal™ AI Edge Series Gen 2 https://www.amd.com/[...]
[96] 웹사이트 Hybrid 8-bit Floating Point (HFP8) Training and Inference for Deep Neural Networks https://papers.neuri[...] null
[97] 웹사이트 Enter Dojo: Tesla Reveals Design for Modular Supercomputer & D1 Chip https://www.hpcwire.[...] null
[98] 웹사이트 8-bit Numerical Formats for Deep Neural Networks https://arxiv.org/ab[...] null
[99] 웹사이트 Low Precision FP8 Floating-Point Formats for Machine Learning Marius Cornea, Intel Corp. December 2022 https://123646052721[...]
[100] 웹사이트 OCP Microscaling Formats (MX) Specification Version 1.0 https://www.opencomp[...] null
[101] 웹사이트 NVIDIA Tensor Cores: Versatility for HPC & AI https://www.nvidia.c[...] null
[102] 서적 パターソン&ヘネシー『コンピュータの構成と設計 第3版 別冊 歴史展望』第3章 pp. 53-55
[103] 서적 『ハッカーのたのしみ』15章3節(pp. 283-285)
[104] 논문 あふれのない浮動小数点表示方式 1980-07
[105] 서적 共立『アルゴリズム辞典』p. 677
[106] 논문 Data Length Independent Real Number Representation Based on Double Exponential Cut 1987-03-31
[107] 웹사이트 (25-9) 新しい数値表現法URR http://www.ipsj.or.j[...] 1984-01
[108] 문서 射影モード
[109] 논문 二重指数分割に基づくデータ長独立実数値表現法 1981-11
[110] 논문 二重指数分割に基づくデータ長独立実数値表現法 II 1983-03
[111] 웹사이트 鎌田誠による解説 http://homepage2.nif[...]
[112] 논문 各種浮動小数点表現法の評価方式の実現 https://cir.nii.ac.j[...] 1988-08-15
[113] 논문 URR浮動小数点数のための高速演算装置の基本設計と実装 https://cir.nii.ac.j[...] 2008
[114] 논문 Overflow/underflow-free floating-point number representations with self-delimiting variable-length exponent field
[115] 논문 多重指数部を持つ実数表現方式の標準案 http://id.nii.ac.jp/[...] 1994-09-20
[116] 논문 拡張した二重指数分割表現による数値表現法に関する研究 http://id.nii.ac.jp/[...] 1995-10-18
[117] 논문 3重指数分割による数値表現方式について https://ci.nii.ac.jp[...] 1988
[118] 논문 新しい可変長指数部浮動小数点数表現形式の提案 http://id.nii.ac.jp/[...] 1997-05-09
[119] 논문 一般化した二重指数分割に基づく数値表現法 http://id.nii.ac.jp/[...] 1998-03-15
[120] 문서 정보통신표준용어에 따른 표기. 순화용어는 "떠돌이 소수점"이다.
[121] 문서 본래 이진법에서는 십진수 소수가 정확히 표현되지 않는다.
[122] 서적
[123] 서적
[124] 서적
[125] 문서 하지만 cos(π)는 정확히 −1이 된다. 도함수가 π 근처에서 0에 가까우므로, 인자의 부정확함이 −1 근처의 부동소수점 수들의 간격보다 훨씬 작아지고 따라서 반올림한 결과는 정확하게 나온다.
[126] 문서 이 16바이트 규격은 IEEE 754 규격서에 직접 명시되어 있지는 않다.



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com