캐스팅 (부동) 33554329L 결과는 33554328입니다. 그런 다음 숫자가 33554328에 머물러 있으면 값은 33554328으로 유지됩니다. 이에 대한 설명이 하나 있습니다. C에서 VS2005를 사용플로트 캐스팅은 1 씩 값을 줄입니다.
++
캐스팅 (부동) 33554329L 결과는 33554328입니다. 그런 다음 숫자가 33554328에 머물러 있으면 값은 33554328으로 유지됩니다. 이에 대한 설명이 하나 있습니다. C에서 VS2005를 사용플로트 캐스팅은 1 씩 값을 줄입니다.
++
Floats이 높은 (30 억 +) 숫자 매우 낮은 정밀도를 가지고 [비 관리].
플로트의 정밀도는 0-1 범위에서 가장 좋습니다. 0에서 갈수록 정확도가 떨어집니다. 그리고 약 30 억에 이르면 모든 정수를 유지할만큼 정확하지 않습니다 (따라서 가장 가까운 값으로 반올림됩니다).
해결책 : double (또는 decimal representation)을 사용하십시오.
다양한 부동 소수점 유형의 표현 정확도는 크기에 따라 다릅니다. 32 비트 부동 소수점의 경우 대략 7 자리의 정확도를 기대할 수 있습니다. 이중의 경우 약 16 자리입니다.
부동 소수점 표현과 다양한 장점과 단점에 대해 읽어 보는 것이 좋습니다. 장기간에 걸쳐 많은 번거 로움을 덜어줍니다. 특히 비교와 같은 것이 예상대로 작동하지 않을 때 특히 그렇습니다.
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++로 구현 한 타사 라이브러리를 찾을 수 있습니다.
실제로 숨겨진 비트 때문에 24 비트입니다. 정규화 된 숫자는 1, 비표준 숫자는 0입니다. – fredoverflow
부동 소수점 연산이 다른 희생자를 요구했습니다! 그것은 모든 * 프로그래머를위한 일부 예식입니다. :) –
영업의 수는 약 3,300 만입니다. – Mephane