Skąd pochodzi numer 92233720368547800 paypal? [Zamknięte]

36

W wiadomościach pojawiła się historia o mężczyźnie, którego konto Paypal przypadkowo zostało zasilone kwotą 92 233 720 368 587 8700 $.

Skąd ten numer? Jaki błąd programowy prawdopodobnie spowoduje powstanie tego numeru?

shamp00
źródło
5
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ nie jest to problem programowania koncepcyjnego w zakresie określonym w Centrum pomocy.

Odpowiedzi:

58

Jest to maksymalna wartość długiego (64-bitowego typu całkowego ze znakiem).

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

Wartość tej stałej wynosi 9 223 372,036,854,775,807; to znaczy, szesnastkowy 0x7FFFFFFFFFFFFFFF.

To byłaby maksymalna wartość dla 64-bitowego typu integralnego ze znakiem w dowolnym języku, nie zakładam, że paypal używa .NET, powyższy link do MSDN jest tylko ilustracyjny.

Ten błąd jest prawdopodobnie tylko słabym błędem konwersji (np. Z dziesiętnego lub zmiennoprzecinkowego itp. Na długi, który nie działał poprawnie), co powoduje przepełnienie wartości lub zły kod domyślny dla jakiegoś dziwnego scenariusza, lub może to być test w produkcji przez ich zespół inżynierów / QA poszedł drutem siana. Błąd wycieku pamięci / wskaźnika, lista sposobów spowodowania tego jest naprawdę niezliczona. Mógł to być błąd analizowania deserializujący niektóre informacje, które do nich dotarły, ogromnie liczne sposoby, aby przypadkowo uzyskać nieoczekiwaną lub źle wyrównaną wartość całkowitą.

Jimmy Hoffa
źródło
1
jeszcze bardziej dziwne jest to, że liczba ta została najwyraźniej zaokrąglona w górę do najbliższych 100 dolarów.
KutuluMike,
4
Dlaczego liczby w pytaniu i odpowiedzi nie są takie same?
Czwartek Czwartek
3
Ponieważ wartość całkowita jest liczbą groszy. Więc dzielisz 2 ^ 63-1 przez 100, aby otrzymać dolary. A potem z jakiegoś powodu coś zaokrąglono do najbliższych 100 $.
Mark Adler
4
@ththssekek pewna matematyka poszła na tyle źle, aby spowodować całkowite przepełnienie, istnieje szansa, że ​​kod popełni błąd, matematyka kontynuowała obliczanie niektórych operacji po wystąpieniu przepełnienia, powodując, że kwota zmieniła się jeszcze bardziej. Jakby równanie było równe 2 + 3 * 4 * 8/22 + 400 ^ 2, a na drugim etapie nastąpi przepełnienie, kolejne operacje będą miały zastosowanie do tej niepoprawnej liczby.
Jimmy Hoffa