Dari mana nomor 92233720368547800 paypal berasal? [Tutup]

36

Ada berita dalam berita tentang seorang pria yang akun Paypalnya secara tidak sengaja dikreditkan dengan $ 92.233.720.368.547.800.

Dari mana asal nomor ini? Bug pemrograman macam apa yang mungkin menyebabkan angka ini?

Shamp00
sumber
5
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena ini bukan masalah pemrograman konseptual dalam ruang lingkup yang ditentukan di pusat bantuan.

Jawaban:

58

Ini adalah nilai maksimum panjang (tipe integral bertanda 64 bit).

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

Nilai konstanta ini adalah 9.223.372.036.854.775.807; yaitu, 0x7FFFFFFFFFFFFFFFFFFF heksadesimal.

Ini akan menjadi nilai maksimum untuk tipe integral bertanda tangan 64-bit dalam bahasa apa pun, saya tidak berasumsi menggunakan paypal .NET, tautan ke MSDN di atas hanyalah ilustrasi.

Kesalahan tersebut kemungkinan hanya kesalahan konversi yang buruk (seperti dari desimal atau float atau dll hingga lama yang tidak berfungsi dengan benar) yang mengakibatkan beberapa nilai meluap, atau kode default yang buruk untuk beberapa skenario aneh, atau bisa saja tes dalam produksi oleh tim engineering / QA mereka kehilangan daya. Memori kebocoran / kesalahan pointer, daftar cara untuk menyebabkan ini benar-benar tak terhitung Bisa jadi kesalahan penguraian deserializing beberapa informasi yang datang kepada mereka di kawat, banyak cara untuk secara tidak sengaja berakhir dengan nilai integral yang tak terduga atau tidak selaras.

Jimmy Hoffa
sumber
1
Yang lebih aneh adalah bahwa angka itu tampaknya dibulatkan ke $ 100 terdekat.
KutuluMike
4
Mengapa angka-angka dalam pertanyaan dan jawaban tidak sama?
thursdaysgeek
3
Karena nilai integer adalah hitungan uang. Jadi Anda membagi 2 ^ 63-1 dengan 100 untuk mendapatkan dolar. Dan kemudian sesuatu dibulatkan ke $ 100 terdekat karena suatu alasan.
Mark Adler
4
@thursdaysgeek beberapa matematika salah cukup untuk menyebabkan limpahan integral, kemungkinan dalam proses kode mendapatkan matematika salah itu terus menghitung beberapa operasi setelah melimpah terjadi menyebabkan jumlah berubah lebih banyak lagi. Seolah-olah persamaannya adalah 2 + 3 * 4 * 8/22 + 400 ^ 2 dan pada langkah kedua terjadi overflow, operasi berikut akan terus menerapkan ke nomor yang salah.
Jimmy Hoffa