Da dove viene il numero 92233720368547800 di paypal? [chiuso]


36

C'è stata una storia nelle notizie su un uomo il cui conto Paypal è stato accidentalmente accreditato con $ 92.233.720.368.547.800.

Da dove viene questo numero? Che tipo di bug di programmazione può generare questo numero?


5
Sto votando per chiudere questa domanda come fuori tema perché non è un problema di programmazione concettuale nell'ambito definito nel Centro assistenza.

Risposte:


58

È il valore massimo di un lungo (tipo integrale con segno a 64 bit).

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

Il valore di questa costante è 9.223.372.036.854.775.807; cioè, esadecimale 0x7FFFFFFFFFFFFFFF.

Questo sarebbe il valore massimo per un tipo integrale con segno a 64 bit in qualsiasi lingua, non presumo che paypal usi .NET, il collegamento a MSDN sopra è solo illustrativo.

L'errore è probabilmente solo uno scarso errore di conversione (come da decimale o float o ecc. A lungo che non ha funzionato correttamente) con conseguente overflow di un valore o codice di default errato per qualche strano scenario, o avrebbe potuto essere un test in produzione dal loro team di ingegneria / QA andato filo di fieno. Perdita di memoria / errore del puntatore, l'elenco dei modi per causarlo è davvero infinito. Potrebbe essere stato un errore di analisi che deserializzava alcune informazioni che arrivavano loro attraverso il filo, tremendamente numerosi modi per finire accidentalmente con un valore integrale inatteso o disallineato.


1
ancora più strano è che il numero apparentemente è stato arrotondato per eccesso ai $ 100 dollari più vicini.
KutuluMike,

4
Perché i numeri nella domanda e nella risposta non sono gli stessi?
giovedì giovedì

3
Perché il valore intero è un conteggio di centesimi. Quindi dividi 2 ^ 63-1 per 100 per ottenere dollari. E poi qualcosa arrotondato ai $ 100 più vicini per qualche motivo.
Mark Adler,

4
@th Thursdaysgeek alcuni calcoli matematici sono andati abbastanza male da causare un overflow integrale, è probabile che il codice stia sbagliando la matematica che ha continuato a calcolare alcune operazioni dopo che si è verificato l'overflow causando un ulteriore cambiamento della quantità. Come se l'equazione fosse 2 + 3 * 4 * 8/22 + 400 ^ 2 e sul secondo passaggio si verificasse un overflow, le seguenti operazioni continueranno ad applicarsi a quel numero errato.
Jimmy Hoffa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.