Woher kommt die Nummer 92233720368547800 von paypal? [geschlossen]

36

In den Nachrichten gab es eine Geschichte über einen Mann, dessen Paypal-Konto versehentlich mit 92.233.720.368.547.800 US-Dollar belastet wurde.

Woher kommt diese Nummer? Welche Art von Programmierfehler wird wahrscheinlich zu dieser Zahl führen?

shamp00
quelle
5
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da es sich nicht um ein konzeptionelles Programmierproblem handelt, das in dem in der Hilfe definierten Bereich liegt.

Antworten:

58

Dies ist der Maximalwert eines Long-Typs (64-Bit-Integraltyp mit Vorzeichen).

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

Der Wert dieser Konstante beträgt 9.223.372.036.854.775.807; das heißt, hexadezimal 0x7FFFFFFFFFFFFFFF.

Dies wäre der Maximalwert für einen 64-Bit-Typ mit Vorzeichen in einer beliebigen Sprache. Ich gehe nicht davon aus, dass Paypal .NET verwendet. Der Link zu MSDN oben ist nur veranschaulichend.

Der Fehler ist wahrscheinlich nur ein schwacher Konvertierungsfehler (wie von Dezimal oder Float oder so weiter bis Long, der nicht richtig funktioniert hat), der zu einem Überlauf eines Werts oder zu einem fehlerhaften Standardcode für ein seltsames Szenario führt, oder es könnte ein Test gewesen sein in der Produktion von ihrem Engineering / QA-Team Heudraht gegangen. Memory Leak / Pointer Error, die Liste der Ursachen ist wirklich unzählig. Es könnte ein Parsing-Fehler beim Deserialisieren einiger Informationen gewesen sein, die über das Kabel eingegangen sind, und es gab enorm viele Möglichkeiten, versehentlich einen unerwarteten oder falsch ausgerichteten Integralwert zu erhalten.

Jimmy Hoffa
quelle
1
Noch seltsamer ist, dass die Zahl anscheinend auf die nächsten 100 Dollar aufgerundet wurde.
KutuluMike
4
Warum stimmen die Zahlen in Frage und Antwort nicht überein?
Donnerstag,
3
Weil der ganzzahlige Wert ein Zählwert für ein paar Cent ist. Also dividieren Sie 2 ^ 63-1 durch 100, um Dollars zu erhalten. Und dann wurde aus irgendeinem Grund etwas auf die nächsten 100 Dollar gerundet.
Mark Adler
4
@thursdaysgeek Einige Berechnungen sind falsch genug gelaufen, um einen integralen Überlauf zu verursachen. Es besteht die Möglichkeit, dass der Code beim Berechnen einiger Operationen, nachdem der Überlauf aufgetreten ist, fehlerhafte Berechnungen durchführt, wodurch sich die Menge noch mehr ändert. Als ob die Gleichung 2 + 3 * 4 * 8/22 + 400 ^ 2 wäre und im zweiten Schritt ein Überlauf auftritt, gelten die folgenden Operationen weiterhin für diese falsche Zahl.
Jimmy Hoffa