단 정밀도 부동 소수점 연산과 배정 밀도 부동 연산의 차이점은 무엇입니까?
비디오 게임 콘솔과 관련하여 실용적인 용어에 특히 관심이 있습니다. 예를 들어, Nintendo 64는 64 비트 프로세서를 가지고 있으며 그렇다면 그렇다면 배정도 부동 소수점 연산이 가능 했습니까? PS3와 Xbox 360은 배정도 부동 소수점 연산을 할 수 있거나 단 정도만 사용할 수 있으며 일반적으로 배정도 기능 (사용하는 경우)을 사용합니다.
단 정밀도 부동 소수점 연산과 배정 밀도 부동 연산의 차이점은 무엇입니까?
비디오 게임 콘솔과 관련하여 실용적인 용어에 특히 관심이 있습니다. 예를 들어, Nintendo 64는 64 비트 프로세서를 가지고 있으며 그렇다면 그렇다면 배정도 부동 소수점 연산이 가능 했습니까? PS3와 Xbox 360은 배정도 부동 소수점 연산을 할 수 있거나 단 정도만 사용할 수 있으며 일반적으로 배정도 기능 (사용하는 경우)을 사용합니다.
답변:
참고 : Nintendo 64 에는 64 비트 프로세서가 있습니다.
64 비트 데이터를 처리 할 때 일반적으로 64 비트 데이터 유형에 사용할 수있는 더 큰 데이터 정밀도가 필요하지 않으며 64 비트 데이터를 처리하는 데 두 배의 RAM과 캐시가 사용되므로 많은 게임에서 칩의 32 비트 처리 모드를 이용했습니다. 및 대역폭으로 인해 전체 시스템 성능이 저하됩니다.
에서 Webopedia :
배정 밀도라는 용어는 정밀도가 실제로 배가 아니기 때문에 잘못된 것입니다.
double이라는 단어는 배정 밀도 숫자가 일반 부동 소수점 숫자보다 두 배 많은 비트를 사용한다는 사실에서 파생됩니다.
예를 들어 단 정밀도 숫자에 32 비트가 필요한 경우 배정 밀도 대응 길이는 64 비트입니다.여분의 비트는 정밀도뿐만 아니라 표현 될 수있는 크기의 범위를 증가시킵니다.
정밀도와 크기의 범위가 증가하는 정확한 양은 프로그램이 부동 소수점 값을 나타내는 데 사용하는 형식에 따라 다릅니다.
대부분의 컴퓨터는 IEEE 부동 소수점 형식으로 알려진 표준 형식을 사용합니다.
IEEE 배정도 형식은 실제로 단정도 형식 보다 두 배 이상의 정밀도를 가지며 훨씬 더 큰 범위를 갖 습니다.
단정도
IEEE 단 정밀도 부동 소수점 표준 표현에는 32 비트 워드가 필요합니다. 32 비트 워드는 0에서 31까지 번호가 왼쪽에서 오른쪽으로 표시 될 수 있습니다.
마지막 23 비트는 분수 'F'입니다.
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
0 1 8 9 31
단어로 표현 된 값 V는 다음과 같이 결정될 수있다 :
0<E<255
다음 V=(-1)**S * 2 ** (E-127) * (1.F)
"1.F는"1를 선도하는 암시 적 이진 지점 F를 접두사에 의해 생성 된 이진수를 나타 내기위한된다.V=(-1)**S * 2 ** (-126) * (0.F)
. 이들은 "비정규 화 된"값입니다.특히,
0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0
0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity
0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN
0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5
0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127)
0 00000000 00000000000000000000001 = +1 * 2**(-126) *
0.00000000000000000000001 =
2**(-149) (Smallest positive value)
배정도
IEEE 배정 밀도 부동 소수점 표준 표현에는 64 비트 워드가 필요하며, 왼쪽에서 오른쪽으로 0에서 63까지 번호가 매겨져 표시 될 수 있습니다.
마지막 52 비트는 분수 'F'입니다.
S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0 1 11 12 63
단어로 표현 된 값 V는 다음과 같이 결정될 수있다 :
0<E<2047
다음 V=(-1)**S * 2 ** (E-1023) * (1.F)
"1.F는"1를 선도하는 암시 적 이진 지점 F를 접두사에 의해 생성 된 이진수를 나타 내기위한된다.V=(-1)**S * 2 ** (-1022) * (0.F)
"정규화되지 않은"값입니다.참조 :
ANSI / IEEE 표준 754-1985,
이진 부동 소수점 산술 표준.
나는 많은 답변을 읽었지만 double 이라는 단어의 출처 를 정확하게 설명하는 사람 은 없습니다. 몇 년 전에 대학 교수가 한 좋은 설명이 기억납니다.
VonC의 답변 스타일을 상기 한 단 정밀도 부동 소수점 표현은 32 비트 워드를 사용합니다.
대표:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
bits: 31 30 23 22 0
(단지 부호 비트는 첫 번째가 아니라 마지막입니다.)
더블 부동 소수점 표현 정밀도는 64 비트의 단어를 사용합니다.
대표:
S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits: 63 62 52 51 0
아시다시피, 가수 는 두 가지 유형 모두 표현에 비해 정보가 조금 더 있습니다. 실제로, 가수는 모든 비유의없이 표현 된 숫자 0
입니다. 예를 들어
이것은 가수가 항상 형태 일 것임을 의미합니다
0.α 1 α 2 ... α t × β p
여기서 β는 표현의 기초입니다. 그러나 분수는 이진수이므로 α 1 은 항상 1과 같으므로 분수는 1로 다시 쓸 수 있습니다 . α 2 α 3 ... α t + 1 × 2 p , 암시 가정 될 수있는 초기 1 여분의 비트를위한 공간 확보 (α t + 1 ).
32의 2 배가 64라는 것은 사실이지만, 그 단어가 나오는 곳이 아닙니다.
정밀도는 있습니다 소수 자릿수를 나타냅니다 올바른 표현 오류 또는 근사치의 어떤 종류없이 즉,. 다시 말해, 얼마나 안전하게 십진수를 사용할 수 있는지 나타냅니다. 사용할 .
그렇게 말하면 안전하게 사용할 수있는 소수 자릿수를 쉽게 추정 할 수 있습니다.
여기에 모든 훌륭한 답변을 추가하려면
먼저 float 및 double 은 모두 소수를 나타내는 데 사용됩니다. 따라서 두 값의 차이는 숫자를 얼마나 정확하게 저장할 수 있는지에 달려 있습니다.
예를 들어 : 123.456789를 저장해야합니다. 하나는 123.4567 만 저장할 수 있고 다른 하나는 정확한 123.456789를 저장할 수 있습니다.
따라서 기본적으로 우리는 얼마나 정확하게 숫자를 저장할 수 있는지 알고 싶어합니다.
@Alessandro 인용
정밀도는 정확한 소수 자릿수를 나타냅니다. 즉, 어떤 종류의 표현 오류나 근사도 없습니다. 즉, 안전하게 사용할 수있는 소수 자릿수를 나타냅니다 .
Float는 분수 부분에 약 7-8 자리를 정확하게 저장할 수있는 반면 Double은 분수 부분에 약 15-16 자리를 정확하게 저장할 수 있습니다.
따라서 float는 소수 부분의 두 배 를 저장할 수 있습니다 . 그래서 Double은 float 두 배 라고 합니다.
배정도는 숫자가 저장하는 데 단어 길이의 두 배가 걸린다는 것을 의미합니다. 32 비트 프로세서에서 단어는 모두 32 비트이므로 double은 64 비트입니다. 이것이 성능 측면에서 의미하는 것은 배정도 숫자에 대한 연산을 실행하는 데 시간이 조금 더 걸린다는 것입니다. 따라서 더 나은 범위를 얻을 수 있지만 성능이 약간 저하됩니다. 이 적중은 하드웨어 부동 소수점 단위로 약간 완화되지만 여전히 있습니다.
N64는 64 비트 프로세서 인 MIPS R4300i 기반 NEC VR4300을 사용 했지만 프로세서는 32 비트 폭의 버스를 통해 나머지 시스템과 통신합니다. 따라서 대부분의 개발자는 더 빠르기 때문에 32 비트 숫자를 사용했으며 당시 대부분의 게임에는 추가 정밀도가 필요하지 않았습니다 (따라서 부동 소수점을 두 배로 사용하지 않음).
세 가지 시스템은 수 작업을 부동 단일 및 이중 정밀도를 할 수 있지만 때문이 아니라 성능이 있습니다. (n64 이후 거의 모든 것이 32 비트 버스를 사용했기 때문에 ...)
먼저 float 및 double은 모두 소수를 나타내는 데 사용됩니다. 따라서 두 값의 차이는 숫자를 얼마나 정확하게 저장할 수 있는지에 달려 있습니다.
예를 들어 : 123.456789를 저장해야합니다. 하나는 123.4567 만 저장할 수 있고 다른 하나는 정확한 123.456789를 저장할 수 있습니다.
따라서 기본적으로 우리는 얼마나 정확하게 숫자를 저장할 수 있는지 알고 싶어합니다.
@Alessandro 인용
정밀도는 정확한 소수 자릿수를 나타냅니다. 즉, 어떤 종류의 표현 오류나 근사도 없습니다. 즉, 안전하게 사용할 수있는 소수 자릿수를 나타냅니다.
Float는 분수 부분에 약 7-8 자리를 정확하게 저장할 수있는 반면 Double은 분수 부분에 약 15-16 자리를 정확하게 저장할 수 있습니다.
따라서 double은 부동 소수점 부분의 두 배를 저장할 수 있습니다. 그래서 Double은 float 두 배라고합니다.