- สไนเป็ตจาก StackOverflow ที่ถูกคัดลอกมากที่สุด ซึ่ง Andreas Lundblad เขียนไว้ในปี 2010 มีข้อบกพร่อง
- สไนเป็ตนี้เป็นคำตอบของปัญหาในการแสดงจำนวนไบต์ให้อยู่ในรูปแบบที่มนุษย์อ่านเข้าใจได้ เช่น แสดง 123,456,789 ไบต์เป็น "123.5 MB"
- วิธีแก้ของ Lundblad ใช้ลอการิทึมแทนลูปเพื่อคำนวณคำต่อท้ายที่เหมาะสม (
kB, MB, GB เป็นต้น)
- สไนเป็ตนี้กลายเป็นสิ่งที่ถูกคัดลอกมากที่สุดหลังจากถูกระบุไว้ในงานวิจัยปี 2018 ชื่อ "การใช้และการอ้างที่มาของโค้ดสไนเป็ตจาก Stack Overflow ในโปรเจ็กต์ GitHub"
- งานวิจัยพบว่า คนส่วนใหญ่เมื่อคัดลอกโค้ดจาก Stack Overflow มักไม่ได้ใส่การอ้างอิงที่มาอย่างเหมาะสม
- ข้อบกพร่องของสไนเป็ตของ Lundblad คือมีข้อผิดพลาดในการปัดเศษเมื่อจำนวนไบต์เข้าใกล้ 1 MB ตัวอย่างเช่น อินพุต 999,999 ไบต์จะให้ผลลัพธ์เป็น "1000.0 kB" แทนที่จะเป็น "1.0 MB" ที่ถูกต้อง
- Lundblad ได้เผยแพร่โค้ดเวอร์ชันแก้ไขที่รองรับปัญหานี้และกรณีสุดขั้วอื่น ๆ รวมถึงอินพุตติดลบและข้อจำกัดด้านความแม่นยำของ
double
- บทเรียนสำคัญจากบทความนี้คือความสำคัญของการทดสอบกรณีสุดขั้วทั้งหมด ความซับซ้อนของเลขคณิตแบบจุดลอยตัว และความจำเป็นของการอ้างอิงที่มาอย่างเหมาะสมเมื่อคัดลอกโค้ด
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
log()สองครั้ง การเรียกpow()หนึ่งครั้ง และการใช้ceil()ในโค้ด พร้อมเสนอว่าแนวทางที่ง่ายกว่าน่าจะมีประสิทธิภาพกว่าlogแบบจำนวนจริงและการหารที่นำไปใช้กับจำนวนเต็มในโค้ดถูกวิจารณ์ว่าซับซ้อนเกินจำเป็นและเสี่ยงต่อบั๊ก