2014-11-29 11 views
1

그래서 단 정밀도 부동 소수점으로 표현할 수없는 가장 큰 정수는 2^(23 + 1) + 1 = 16,777,217이라는 것을 알고 있습니다.단 정밀도 부동 소수점에서 표현할 수없는 가장 작은 정수

우리는 2^(23 + 1) + 1을 어떻게 사용했는지 알아 냈습니다. 23 개의 가수가 나타내는 비트 수와 함게 묵시적 1이 있음을 이해하지만 왜이 기능이 작동합니까?

+0

2의 제곱 정수 (최대 2^127)는 부동 소수점으로 정확하게 표현할 수 있습니다. 정의를 좀 더 정확하게 만들어야합니다. – nneonneo

+0

하나의 부동 소수점 정밀도에서 표현할 수없는 가장 작은 정수를 찾고 싶습니다 (반드시 2의 거듭 제곱이 아님). 내가 발견 한 것으로부터 16,777,217이지만, 그 번호를 어떻게 찾았는지 완전히 이해하지 못합니다. –

+0

@ 윌슨 : 두 번째 단락에서 질문에 대답했습니다. 나는 너의 설명에 덧붙일 것이 없다. 특히, 나는 왜 당신이 "이게 효과가 있니?"라고 물을 때 당신이 찾고있는 것을 모른다. – tmyklebu

답변

0

나는 귀하의 질문을 가지고 있다고 생각합니다. 특히 이러한 변수의 구조/디자인이 어떻게 수행되는지에 대해 살펴보십시오. http://en.m.wikipedia.org/wiki/Single_precision

부동 소수점은 보통 부동 소수점 변수를 나타냅니다. 즉, 번호를 저장하는 곳 (보통 3 바이트)을 의미합니다. 그런 다음 추가로 (1 바이트) 지수를 사용하여이 숫자 내에서 지점을 설정할 위치를 지정합니다.

이제이 값에 저장할 수있는 최대 및 최소 숫자를 쉽게 계산할 수 있습니다.

하지만 까다로운 부분이 있습니다. 이것은 고정 소수점 정수가 아니기 때문에 이상한 문제를 야기 할 수있는 제한된 정밀도를 가질 수 있습니다. 숫자가 커지면 숫자 사이의 절대 거리가 커집니다. 어느 시점에서 1을 더할 수있는 숫자에 도달하게되고, 사용 가능한 정밀도 범위 밖에있는 원인으로 인해 동일한 숫자가 유지됩니다. 위의 wiki 페이지에서 볼 수 있듯이 1 비트는 음수를 표시하는 데 사용되며 23 비트는 정밀도에 사용되며 8은 지수로 사용됩니다. 예를 들어, 지수가 40 일 때, 포인트가 40 위 자리에있는 23 비트 숫자를 갖게됩니다. 나머지는 모두 0으로 채워집니다. 1을 추가하면 번호가 변경되지 않으므로 외부에 있기 때문에 중요한 범위는 저장되지 않습니다.

어쩌면 당신은 지수에 또 다른 +1이 있는지 묻고있을 것입니다. 여기에 잘 설명되어 있습니다 : Which is the first integer that an IEEE 754 float is incapable of representing exactly? abcdefg 형식의 가수가 실제로 1.abcdefg를 나타냅니다.