페이팔의 92233720368547800 번호는 어디에서 왔습니까? [닫은]


36

이있었습니다 뉴스에 이야기 페이팔 계정을 실수로 $ 92,233,720,368,547,800 적립 된 사람에 대해.

이 번호는 어디에서 왔습니까? 어떤 종류의 프로그래밍 버그가이 숫자를 발생시킬 수 있습니까?


5
이 질문은 도움말 센터에 정의 된 범위 내에서 개념적 프로그래밍 문제가 아니기 때문에 주제를 벗어난 주제로 마무리하려고합니다.

답변:


58

long (64 비트 부호있는 정수 유형)의 최대 값입니다.

에서 http://msdn.microsoft.com/en-us/library/system.int64.maxvalue.aspx

이 상수의 값은 9,223,372,036,854,775,807입니다. 즉, 16 진 0x7FFFFFFFFFFFFFFF입니다.

이것은 페이팔이 .NET을 사용한다고 가정하지 않고 위의 MSDN에 대한 링크는 단지 예시 적입니다.

이 오류는 변환 오류 (십진수 또는 부동 소수점 등에서 올바르게 작동하지 않는 긴 것)와 같이 값이 넘치거나 이상한 시나리오의 기본 코드가 잘못되었거나 테스트되었을 수 있습니다. 그들의 엔지니어링 / QA 팀에 의해 생산이 사라졌습니다. 메모리 누수 / 포인터 오류,이를 발생시키는 방법의 목록은 실제로 무수히 많습니다. 와이어를 통해 제공된 일부 정보를 직렬화 해제하는 구문 분석 오류 일 수 있습니다.


1
더 이상한 것은 그 숫자가 가장 가까운 $ 100 달러로 반올림되었다는 것입니다.
KutuluMike

4
질문과 답변의 숫자가 다른 이유는 무엇입니까?
thursdaysgeek

3
정수 값은 동전 수이기 때문입니다. 따라서 2 ^ 63-1을 100으로 나누어 달러를 얻습니다. 그리고 어떤 이유로 가장 가까운 $ 100로 반올림했습니다.
Mark Adler

4
@thursdaysgeek 일부 수학은 완전한 오버플로를 일으킬 정도로 잘못되었습니다. 코드가 수학을 잘못 처리하는 과정에서 오버플로가 발생한 후에도 일부 연산을 계속 계산하여 양이 더 많이 변경되었습니다. 방정식이 2 + 3 * 4 * 8 / 22 + 400 ^ 2이고 두 번째 단계에서 오버 플로우가 발생하는 것처럼 다음 작업은 잘못된 수에 계속 적용됩니다.
Jimmy Hoffa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.