2011-02-16 2 views

답변

2

Floats이 높은 (30 억 +) 숫자 매우 낮은 정밀도를 가지고 [비 관리].

플로트의 정밀도는 0-1 범위에서 가장 좋습니다. 0에서 갈수록 정확도가 떨어집니다. 그리고 약 30 억에 이르면 모든 정수를 유지할만큼 정확하지 않습니다 (따라서 가장 가까운 값으로 반올림됩니다).

해결책 : double (또는 decimal representation)을 사용하십시오.

+0

영업의 수는 약 3,300 만입니다. – Mephane

1

다양한 부동 소수점 유형의 표현 정확도는 크기에 따라 다릅니다. 32 비트 부동 소수점의 경우 대략 7 자리의 정확도를 기대할 수 있습니다. 이중의 경우 약 16 자리입니다.

부동 소수점 표현과 다양한 장점과 단점에 대해 읽어 보는 것이 좋습니다. 장기간에 걸쳐 많은 번거 로움을 덜어줍니다. 특히 비교와 같은 것이 예상대로 작동하지 않을 때 특히 그렇습니다.

7

32 비트 부동 소수점에는 8,388,608 개의 고유 값 인 가수 23 비트가 있습니다. 이것은 정확도가 유효 소수점 7 자리 정도임을 의미합니다. 귀하의 전화 번호는 8 자리 10 진수로되어있어서 마지막 유효 숫자의 정확도가 떨어집니다.
Here's More information on float representation

더블 정밀도는 64 비트이고, 따라서 52 4,503599627370,496 (16 자리 숫자)는 가수 비트와 대략 15-16 진수의 정확도를 가지고있다.

decimal 유형은 임의의 길이의 임의의 숫자를 임의의 정확도로 저장할 수있는 잠재적 인 기능입니다. C#에는 있지만 불행히도 C++에서는 기본 유형이 아닙니다. C++로 구현 한 타사 라이브러리를 찾을 수 있습니다.

+0

실제로 숨겨진 비트 때문에 24 비트입니다. 정규화 된 숫자는 1, 비표준 숫자는 0입니다. – fredoverflow

5

읽기 this :

"모든 컴퓨터 과학자 부동 소수점에 대해 알아야 할 사항"

http://www.validlab.com/goldberg/paper.pdf

+0

부동 소수점 연산이 다른 희생자를 요구했습니다! 그것은 모든 * 프로그래머를위한 일부 예식입니다. :) –

관련 문제