หมายเลข 92233720368547800 ของ paypal มาจากไหน [ปิด]


36

มีข่าวในเรื่องเกี่ยวกับผู้ชายคนหนึ่งที่บัญชี Paypal ได้รับเครดิตโดยไม่ตั้งใจกับ $ 92,233,720,368,547,800

หมายเลขนี้มาจากไหน ข้อผิดพลาดในการเขียนโปรแกรมแบบใดที่ทำให้ตัวเลขนี้มีจำนวนมากขึ้น?


5
ฉันลงคะแนนให้ปิดคำถามนี้เป็นนอกหัวข้อเนื่องจากไม่ใช่ปัญหาการเขียนโปรแกรมเชิงแนวคิดภายในขอบเขตที่กำหนดไว้ในศูนย์ช่วยเหลือ

คำตอบ:


58

มันเป็นค่าสูงสุดของ long (ประเภท integral integral ที่ลงนาม 64 บิต)

จากhttp://msdn.microsoft.com/en-us/library/system.int64.maxvalue.aspx

ค่าของค่าคงที่นี้คือ 9,223,372,036,854,775,807; นั่นคือเลขฐานสิบหก 0x7FFFFFFFFFFFFFFF

นี่จะเป็นค่าสูงสุดสำหรับประเภทอินทิกรัลแบบ 64 บิตในภาษาใด ๆ ฉันไม่ได้สมมติว่า paypal ใช้. NET ลิงค์ไปยัง MSDN ด้านบนเป็นเพียงตัวอย่างเท่านั้น

ข้อผิดพลาดน่าจะเป็นข้อผิดพลาดในการแปลงที่ไม่ดี (เช่นจากทศนิยมหรือทศนิยมหรืออื่น ๆ ที่ใช้งานไม่ได้นาน) ทำให้เกิดการล้นของค่าบางอย่างหรือรหัสเริ่มต้นที่ไม่ดีสำหรับสถานการณ์แปลก ๆ บางอย่างหรืออาจเป็นการทดสอบ ในการผลิตโดยวิศวกร / ทีมงานควบคุมคุณภาพของพวกเขาไปหญ้าแห้ง ข้อผิดพลาดการรั่วไหลของตัวชี้ / หน่วยความจำรายการวิธีที่จะทำให้เกิดสิ่งนี้นับไม่ถ้วนจริงๆ อาจเป็นข้อผิดพลาดในการแยกวิเคราะห์หาข้อมูลบางอย่างที่เข้ามาหาพวกเขาข้ามเส้นลวดมากมายหลายวิธีที่จะจบลงโดยไม่ตั้งใจด้วยค่าอินทิกรัลที่ไม่คาดคิดหรือไม่ตรงแนว


1
ยิ่งแปลกไปกว่านั้นคือตัวเลขนั้นถูกปัดเศษขึ้นเป็น $ 100 ดอลลาร์ที่ใกล้ที่สุด
KutuluMike

4
ทำไมตัวเลขในคำถามและคำตอบไม่เหมือนกัน?
พฤหัสบดี

3
เพราะค่าจำนวนเต็มคือจำนวนของเพนนี คุณหาร 2 ^ 63-1 ด้วย 100 เพื่อให้ได้ดอลลาร์ แล้วบางสิ่งก็ถูกปัดเศษเป็น $ 100 ที่ใกล้ที่สุดด้วยเหตุผลบางอย่าง
Mark Adler

4
@thesdaysgeek คณิตศาสตร์บางอย่างผิดพลาดมากพอที่จะทำให้เกิดการโอเวอร์โฟลว์แบบอินเด็กซ์โอกาสที่อยู่ในกระบวนการของรหัสที่ได้รับคณิตศาสตร์ผิดมันยังคงคำนวณการดำเนินการบางอย่างหลังจากเกิดโอเวอร์โฟลว์ทำให้เกิดการเปลี่ยนแปลงมากขึ้น ราวกับว่าสมการเป็น 2 + 3 * 4 * 8/22 + 400 ^ 2 และในขั้นตอนที่สองมีการล้นเกิดขึ้นการดำเนินการต่อไปจะใช้กับหมายเลขที่ไม่ถูกต้อง
Jimmy Hoffa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.