D'où provient le numéro 92233720368547800 de paypal? [fermé]

36

Il y a eu une histoire dans les nouvelles d'un homme dont le compte Paypal a été accidentellement crédité de 92.233.720.368.547.800 $.

D'où vient ce numéro? Quel type de bogue de programmation est susceptible de donner lieu à ce numéro?

shamp00
la source
5
Je vote pour clore cette question hors sujet, car il ne s'agit pas d'un problème de programmation conceptuelle dans la portée définie dans le centre d'aide.

Réponses:

58

C'est la valeur maximale d'un long (type intégral signé 64 bits).

à partir de http://msdn.microsoft.com/en-us/library/system.int64.maxvalue.aspx

La valeur de cette constante est 9.223.372.036.854.775.807; c'est-à-dire, hexadécimal 0x7FFFFFFFFFFFFFFFFF.

Ce serait la valeur maximale pour un type intégral signé de 64 bits dans n'importe quelle langue, je ne suppose pas que paypal utilise .NET, le lien vers MSDN ci-dessus est simplement illustratif.

Il s’agit probablement d’une erreur de conversion médiocre (décimale, flottante, etc., qui ne fonctionne pas correctement) qui entraîne un débordement d’une valeur ou un code défectueux pour un scénario étrange, ou cela aurait pu être un test. en production par leur équipe d’ingénierie / d’assurance-qualité passée à l’ombre Fuite de mémoire / erreur de pointeur, la liste des moyens de le provoquer est vraiment innombrable. Cela aurait pu être une erreur d’analyse syntaxique en désérialisant certaines informations qui leur sont parvenues de bout en bout, énormément de façons de se retrouver accidentellement avec une valeur intégrale inattendue ou mal alignée.

Jimmy Hoffa
la source
1
Ce qui est encore plus étrange, c’est que ce nombre a apparemment été arrondi à la centaine de dollars la plus proche.
KutuluMike
4
Pourquoi les chiffres dans la question et la réponse ne sont-ils pas les mêmes?
Jeudi
3
Parce que la valeur entière est un compte de quelques centimes. Donc, vous divisez 2 ^ 63-1 par 100 pour obtenir des dollars. Et puis quelque chose arrondi à la centaine de dollars près pour une raison quelconque.
Mark Adler
4
@thursdaysgeek certains calculs ont été assez erronés pour provoquer un dépassement intégral, il est probable que le code se trompe, il a poursuivi le calcul de certaines opérations après le dépassement, ce qui a entraîné une modification supplémentaire du montant. Comme si l'équation était 2 + 3 * 4 * 8/22 + 400 ^ 2 et qu'un débordement se produit à la deuxième étape, les opérations suivantes continueront de s'appliquer à ce nombre incorrect.
Jimmy Hoffa