문제

단일 정밀 플로팅 포인트 작동과 이중 정밀 부유 작업의 차이점은 무엇입니까?

저는 비디오 게임 콘솔과 관련하여 실제적인 용어에 특히 관심이 있습니다. 예를 들어, Nintendo 64에는 64 비트 프로세서가 있습니까? 그렇다면 이중 정밀 플로팅 포인트 작업이 가능하다는 것을 의미합니까? PS3 및 Xbox 360은 이중 정밀 부동물 플로팅 포인트 작업 또는 단일 정밀도를 끌어 올릴 수 있으며 일반적으로 사용되는 이중 정밀 기능 (존재하는 경우)입니다.

도움이 되었습니까?

해결책

참고 : 닌텐도 64 그러나 64 비트 프로세서가 있습니다.

64 비트 데이터 유형으로 사용할 수있는 더 큰 데이터 정밀도는 일반적으로 3D 게임에서 필요하지 않기 때문에 많은 게임이 칩의 32 비트 처리 모드를 활용했으며 64 비트 데이터를 처리하는 데 두 배나 많은 RAM, 캐시를 사용한다는 사실이 있습니다. 및 대역폭으로 전체 시스템 성능이 줄어 듭니다.

에서 webopedia:

이중 정밀도라는 용어는 정밀도가 실제로 이중이 아니기 때문에 잘못된 이름입니다.
이중 단어는 이중 정화 번호가 일반 부동 소수점 숫자보다 두 배나 많은 비트를 사용한다는 사실에서 비롯됩니다.
예를 들어, 단일 정화 번호에 32 비트가 필요한 경우 이중 정제 대응 물이 64 비트 길이가됩니다.

여분의 비트는 정밀도뿐만 아니라 표현 될 수있는 크기 범위를 증가시킵니다.
정밀도와 크기 범위가 증가하는 정확한 양은 플로팅 포인트 값을 나타내는 데 프로그램이 어떤 형식을 사용하고 있는지에 따라 다릅니다.
대부분의 컴퓨터는 IEEE 플로팅 포인트 형식으로 알려진 표준 형식을 사용합니다.

로부터 부동 소수점 산술에 대한 IEEE 표준

단일 정밀도

IEEE 단일 정밀 플로팅 포인트 표준 표준 표준 표준에는 32 비트 단어가 필요하며,이 단어는 0에서 31까지 왼쪽에서 오른쪽으로 표시 될 수 있습니다.

  • 첫 번째 비트는 징후 비트, s,
  • 다음 8 비트는 멱지수 비트, 'e'및
  • 마지막 23 비트는 분수 '에프':

    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
    0 1      8 9                    31
    

단어로 표시되는 값 v는 다음과 같이 결정될 수 있습니다.

  • e = 255이고 f가 0이 아닌 경우 v = nan ( "숫자가 아님")
  • e = 255이고 f가 0이고 s는 1이면 v = -infinity
  • e = 255이고 f가 0이고 s는 0이면 v = infinity
  • 만약에 0<E<255 그 다음에 V=(-1)**S * 2 ** (E-127) * (1.F) 여기서 "1.f"는 f f를 암시적인 선행 1 및 이진 지점으로 접두사함으로써 생성 된 이진수를 나타 내기위한 것입니다.
  • E = 0이고 F가 0이 아닌 경우 V=(-1)**S * 2 ** (-126) * (0.F). 이것들은 "정상화되지 않은"값입니다.
  • e = 0이고 f가 0이고 s는 1이면 v = -0
  • e = 0이고 f가 0이고 s는 0이면 v = 0

특히,

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 Double Precision Floating Point 표준 표준 표준에는 64 비트 단어가 필요하며,이 단어는 0에서 63까지 왼쪽에서 오른쪽으로 표시 될 수 있습니다.

  • 첫 번째 비트는 징후 비트, s,
  • 다음 11 비트는입니다 멱지수 비트, 'e'및
  • 마지막 52 비트는입니다 분수 '에프':

    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    0 1        11 12                                                63
    

단어로 표시되는 값 v는 다음과 같이 결정될 수 있습니다.

  • E = 2047이고 F가 0이 아닌 경우 v = nan ( "숫자가 아님")
  • E = 2047이고 F가 0이고 S는 1이면 v = -infinity
  • e = 2047이고 f가 0이고 s는 0이면 v = infinity
  • 만약에 0<E<2047 그 다음에 V=(-1)**S * 2 ** (E-1023) * (1.F) 여기서 "1.f"는 f f를 암시적인 선행 1 및 이진 지점으로 접두사함으로써 생성 된 이진수를 나타 내기위한 것입니다.
  • E = 0이고 F가 0이 아닌 경우 V=(-1)**S * 2 ** (-1022) * (0.F) 이것들은 "정상화되지 않은"값입니다.
  • e = 0이고 f가 0이고 s는 1이면 v = -0
  • e = 0이고 f가 0이고 s는 0이면 v = 0

참조:
ANSI/IEEE 표준 754-1985,
이진 부동 소수점 산술 표준.

다른 팁

나는 많은 대답을 읽었지만 그 단어가 어디에 있는지 정확하게 설명하지 않는 것 같습니다. 더블 에서 오는. 나는 몇 년 전에 내가 가진 대학 교수가 준 아주 좋은 설명을 기억합니다.

Vonc의 답변의 스타일을 상기시켜 주는데, a 하나의 정밀 부동 소수점 표현은 32 비트의 단어를 사용합니다.

  • 1 비트 징후, s
  • 8 비트 멱지수, 'e'
  • 24 비트 분수, 또한 만티사, 또는 계수 (23 개만 표현 되더라도). 그것을 'm'이라고합시다 (for 만티사, 나는이 이름을 "fraction"으로 오해 할 수있는 것을 선호합니다).

대표:

          S  EEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMM
bits:    31 30      23 22                     0

(그냥 지적하기 위해, 사인 비트는 첫 번째가 아니라 마지막입니다.)

더블 정밀 부동 소수점 표현은 64 비트의 단어를 사용합니다.

  • 1 비트 징후, s
  • 11 비트 멱지수, 'e'
  • 53 비트 분수 / 만티사 / 계수 (52 만 대표 되더라도), 'M'

대표:

           S  EEEEEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits:     63 62         52 51                                                  0

아시다시피, 나는 그것을 썼다 만티사 두 유형 모두에서 표현에 비해 정보가 조금 더 있습니다. 사실, Mantissa는 모든 것이 중요하지 않은 숫자입니다. 0. 예를 들어,

  • 0.000124는 0.124 × 10이됩니다−3
  • 237.141은 0.237141 × 10이됩니다3

이것은 Mantissa가 항상 형태에 있음을 의미합니다.

0.α1α2...α × β

여기서 β는 표현의 기초입니다. 그러나 분수는 이진수이므로 α1 항상 1과 같으므로 분수는 1.α로 다시 작성 될 수 있습니다.2α3...αt+1 × 2 그리고 초기 1은 암시 적으로 가정 할 수 있으며, 추가 비트를위한 공간을 만들 수 있습니다 (αt+1).

이제 32의 두 배가 64이라는 것은 사실이지만, 그것은 단어의 출처가 아닙니다.

그만큼 정도 소수점 숫자의 수를 나타냅니다 옳은, 즉, 어떤 종류의 표현 오류 또는 근사치가없는. 다시 말해, 그것은 얼마나 많은 소수점 자리가 할 수 있는지를 나타냅니다. 안전하게 사용.

그렇다고해서 안전하게 사용할 수있는 소수점 자리의 수를 쉽게 추정하기가 쉽습니다.

  • 단일 정밀도: 통나무10(224), 약 7 ~ 8 자릿수
  • 이중 정밀도: 통나무10(253), 약 15 ~ 16 자리 숫자

자, 기계의 기본 차이는 이중 정밀도가 단일보다 두 배나 많은 비트를 사용한다는 것입니다. 일반적인 구현에서는 싱글의 경우 32 비트, 64 비트로 더블에 대해서는 32 비트입니다.

그러나 그것은 무엇을 하는가 평균? 우리가 IEEE 표준을 가정하면, 단일 정밀 번호는 약 23 비트의 Mantissa와 최대 지수는 약 38입니다. 이중 정밀도는 Mantissa에 대해 52 비트, 최대 지수는 약 308입니다.

세부 사항이 있습니다 위키 백과, 평소와 같이.

여기에 모든 멋진 답변을 추가합니다

가장 먼저 뜨다 그리고 더블 둘 다 숫자 분수 숫자의 표현에 사용됩니다. 따라서 두 가지의 차이는 사실에서 비롯됩니다.

예를 들어: 123.456789를 저장해야합니다. 하나는 123.4567 만 저장할 수 있지만 다른 하나는 정확한 123.456789를 저장할 수 있습니다.

따라서 기본적으로 우리는 숫자가 얼마나 정확하게 저장 될 수 있는지 알고 싶습니다. 그리고 우리가 정밀도라고 부르는 것입니다.

여기에 @alessandro 인용

정밀도는 소수점 자릿수의 수를 나타냅니다. 옳은, 즉, 어떤 종류의 표현 오류 또는 근사치가없는. 다시 말해, 그것은 얼마나 많은 소수점 자리가 할 수 있는지를 나타냅니다. 안전하게 사용.

Float는 분수 부품에 약 7-8 자리 숫자를 정확하게 저장할 수 있으며 Double은 분수 부분에 약 15-16 자리를 정확하게 저장할 수 있습니다.

따라서 Float는 저장할 수 있습니다 분수 부품의 양을 두 배로 늘립니다. 그래서 Double이 호출되는 이유입니다 플로트를 두 배로 늘립니다

"PS3 및 XBXO 360은 이중 정밀 부동물 포인트 작업 또는 단일 정밀도를 풀 수 있고 Generel 사용은 이중 정밀 기능 (존재하는 경우)입니다."

나는 두 플랫폼 모두 이중 부동 소수점이 없다고 생각합니다. 원래 셀 프로세서는 Xbox 360이 (R600) 기반으로하는 ATI 하드웨어와 동일하게 32 비트 플로트 만 가지고있었습니다. 셀은 나중에 더블 플로팅 포인트 지지대를 얻었지만 PS3가 그 치프리를 사용하지 않는다고 확신합니다.

원래 단일 정밀도 부동 소수 이중 정밀도 64 비트를 처리합니다.

이중 정밀도의 비트 수는 정밀도를 증가시킬뿐만 아니라 저장할 수있는 최대 값을 증가시킵니다 (즉, 유의 한 숫자 수).

이중 정밀도는 숫자가 저장하는 데 두 배의 단어 길이를 취하는 것을 의미합니다. 32 비트 프로세서에서 단어는 모두 32 비트이므로 복식은 64 비트입니다. 성능 측면에서 이것이 의미하는 것은 이중 정밀 번호에 대한 작업이 실행하는 데 조금 더 오래 걸린다는 것입니다. 따라서 더 나은 범위를 얻지 만 성능에 약간의 타격이 있습니다. 이 히트는 하드웨어 플로팅 포인트 유닛으로 약간 완화되었지만 여전히 거기에 있습니다.

N64는 64 비트 프로세서 인 MIPS R4300I 기반 NEC VR4300을 사용했습니다. 하지만 프로세서는 32 비트 와이드 버스를 통해 나머지 시스템과 통신합니다. 따라서 대부분의 개발자는 더 빠르기 때문에 32 비트 숫자를 사용했으며 당시 대부분의 게임에는 추가 정밀도가 필요하지 않았습니다 (따라서 플로트를 사용하지 않았습니다).

세 시스템 모두 ~할 수 있다 단일 및 이중 정밀 부유 식 작업을 수행하지만 성능 때문에는 그렇지 않을 수 있습니다. (N64 이후 거의 모든 것이 32 비트 버스를 사용했지만 ...)

IEEE754에 따르면 • 부동 소수점 저장 표준 • 32 및 64 비트 표준 (단일 정밀 및 이중 정밀) • 각각 8 및 11 비트 지수 • 중간 결과를위한 확장 형식 (Mantissa 및 지수)

우선 플로트와 더블은 모두 숫자 분수 숫자의 표현에 사용됩니다. 따라서 두 가지의 차이는 사실에서 비롯됩니다.

예를 들어 : 123.456789 저장해야합니다. 하나는 123.4567 만 저장할 수 있지만 다른 하나는 정확한 123.456789를 저장할 수 있습니다.

따라서 기본적으로 우리는 숫자가 얼마나 정확하게 저장 될 수 있는지 알고 싶습니다. 그리고 우리가 정밀도라고 부르는 것입니다.

여기에 @alessandro 인용

정밀도는 어떠한 종류의 표현 오류 또는 근사치없이 올바른 소수점 숫자의 수를 나타냅니다. 다시 말해, 안전하게 사용할 수있는 소수점 자리의 수를 나타냅니다.

Float는 분수 부품에 약 7-8 자리 숫자를 정확하게 저장할 수 있으며 Double은 분수 부분에 약 15-16 자리를 정확하게 저장할 수 있습니다.

따라서 Double은 플로트 시점에서 분수 부품의 두 배를 저장할 수 있습니다. 그렇기 때문에 Double이 Double The Float라고합니다

단일 정밀 번호는 32 비트를 사용하고 MSB는 부호 비트 인 반면 이중 정밀 번호는 64bits를 사용하고 MSB는 사인 비트입니다.

단일 정밀도

SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

이중 정밀도 :

SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top