Откуда взялся номер 92233720368547800 PayPal? [закрыто]

36

В новостях была история о человеке, чей счет Paypal был случайно зачислен на сумму 92 233 720 368 547 800 долларов США.

Откуда этот номер? Какая программная ошибка может привести к этому числу?

shamp00
источник
5
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что это не проблема концептуального программирования в рамках, определенных в справочном центре.

Ответы:

58

Это максимальное значение long (64-битный целочисленный тип со знаком).

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

Значение этой константы составляет 9 223 372 036 854 775 807; то есть шестнадцатеричный 0x7FFFFFFFFFFFFFFF.

Это было бы максимальным значением для 64-битного целого типа со знаком на любом языке, я не предполагаю, что PayPal использует .NET, ссылка на MSDN выше только иллюстративна.

Ошибка, скорее всего, просто плохая ошибка преобразования (например, от десятичной или с плавающей запятой или т. Д. До long, которая не работает правильно), приводящая к некоторому переполнению значения, или к неправильному значению по умолчанию для какого-то странного сценария, или это могла быть проверка в производство их инженеры / QA команда ушла Hay-Wire. Утечка памяти / ошибка указателя, список способов вызвать это действительно бесчисленное множество. Возможно, это была ошибка синтаксического анализа при десериализации некоторой информации, поступившей к ним по проводам, невероятно многочисленными способами случайного получения неожиданного или смещенного интегрального значения.

Джимми Хоффа
источник
1
еще более странным является то, что число, по-видимому, было округлено до ближайших 100 долларов.
KutuluMike
4
Почему цифры в вопросе и ответе не совпадают?
Четверг
3
Потому что целочисленное значение - это количество копеек. Таким образом, вы делите 2 ^ 63-1 на 100, чтобы получить доллары. А потом что-то округлилось до ближайших 100 долларов по какой-то причине.
Марк Адлер
4
@thursdaysgeek некоторая математика пошла не так, чтобы вызвать целочисленное переполнение, есть вероятность, что в коде возникла неправильная математика, он продолжал вычислять некоторые операции после того, как произошло переполнение, что привело к еще большему изменению суммы. Как если бы уравнение было 2 + 3 * 4 * 8/22 + 400 ^ 2, и на втором шаге происходит переполнение, следующие операции будут продолжать применяться к этому неправильному номеру.
Джимми Хоффа