2011-11-09 4 views
1

는 내가 가장 가까운 10,000 내림하려는 64 비트 길이를 가지고, 그래서 간단하고있는 중이 야 :정수 유형 나누기 - 결과를 예측할 수 있습니까?

long myLong = 123456789 
long rounded = (myLong/10000) * 10000; //rounded = 123450000 

이 내가 무엇을 기대해야 할 나타납니다,하지만 난 100 % 아니에요으로 정수 타입이 어떻게 나뉘어지는 지의 내부에서, 나는 이것이 약간의 상황이 예상대로 작동하지 않을 수도 있음을 약간 염려합니다.

여전히 많은 수의/엣지 경우에도 작동합니까?

답변

4

예, 중간 결과 또는 기타 결과가없는 한 작동합니다 (long.MaxValue 초과).

상수에 대해 명시하려면 끝에 L 지정자를 사용할 수 있습니다 (예 : 123456789L.

이와 같이 간단한 계산을 위해 Microsoft (http://research.microsoft.com/en-us/projects/pex/)의 Pex를 제안 할 수 있습니다. Pex는 가장자리 케이스를 찾아 테스트합니다. 이것은 깔끔한 예제이지만, 확신 할 수없는 것을 기반으로 많은 로직을 구축하고 있다면 훌륭한 도구입니다.

1

예, 작동합니다. 정수 나누기의 의미는 사용자가 기대하는 것을 보장합니다.

그러나 가장자리 케이스를 포함하여 특정 사용 사례에 대한 몇 가지 테스트를 작성하는 것이 좋습니다. 이것은 당신을 안심시킬 것입니다.