2012-06-05 5 views
1

처음에는 10 년 이상의 프로그래밍 경험을 가진 경험 많은 프로그래머임을 자백 할 수있게되었습니다. 그러나 내가 여기서 묻고있는 질문은 그 이후로 나를 괴롭혔던 것이다. 나는 처음 10 년 전 C 책을 집어 들었다.정밀도의 의미 Double Type의 범위

다음은 파이썬 부동 유형에 대해 설명하고, 파이썬에 관한 책에서 발췌 한 것입니다.

부동 소수점 숫자 시스템에서 네이티브 배 정밀도 (64 비트) 부동 소수점 숫자의 표현을 이용하여 표현된다. 일반적으로이 약 17 정밀도 숫자와 -308 에 308.This의 범위에서 지수를 제공하는 IEEE 754, 내가 이해하지 것은입니다

C.에서 double 형과 동일입니다 문구

의 의미 "정밀도와 308 -308 범위의 지수의 약 17 자리를 제공합니다 ... ..."

내 직감이 여기 타락 간다

, 왜냐하면 나는 정밀도의 의미를 이해할 수 있기 때문에 어떻게 범위가 다를 수 있습니다. 부동 소수점 숫자가 최대 17 자리 (즉, 최대 1,00000000000000000 - 1)의 값을 나타낼 수있는 경우 지수가 +308 일 수 있음을 의미합니다. 지수가 나는 희망 2.

경우 지수가 10 대략 100 자리 숫자 인 경우가 308 자리 숫자를하지 것, 내 혼란을 표현할 수 있어요.

은 감사 Vaid, Abhishek

Wiki에서

답변

-2

, 더블 정밀 부동 소수점 번호는 17 자리 또는 17 SF에 정밀도를 가질 것으로 예상된다. 지수는 -1022에서 1023 범위에있을 수 있습니다.
-308에서 308까지는 오류이거나 완전히 설명되지 않은 아이디어로 보입니다.

2

우리가 정밀의 두 자리 숫자로 1500을 작성한다고 가정하자. 1600과 1400에서 1500을 구별하기에 충분할만큼 정밀하다는 것을 의미하지만 1510이나 1490에서 1500을 구별하기에 충분히 정확하지는 않습니다.이 수를 구별하려면 세 자리의 정확도가 필요합니다.

내가 네 자리 숫자를 썼다하더라도, 부동 소수점 표현은 반드시 모든 숫자가 포함되어 있지 않습니다. 1500은 1.5 * 10^3입니다. 10 진수 부동 소수점 표현에서는 두 자리의 정밀도로 숫자와 지수의 처음 두 자리 만 저장되며,이 값은 (1.5, 3)으로 작성됩니다.

왜 "진짜"숫자와 자리 표시 자 제로 구별이있다? 얼마나 정확하게 숫자를 나타낼 수 있는지 알려주므로 은 대략적으로으로 인해 손실 된 값의 일부입니다. 1500 + 100 = (1.6, 3)과 1500 = (1.5, 3)을 구별 할 수 있습니다. 그러나 지수를 증가 시키면 15000 = (1.5, 4)를 15000 + 100 = (1.51, 4)와 구별 할 수 없습니다. 기껏해야 십진수 두 자리수로 +/- 10 % 이내의 수치를 근사 할 수 있습니다. 이것은 지수가 얼마나 작거나 큰 지간에 사실입니다.