- Đoạn mã được sao chép nhiều nhất trên StackOverflow, do Andreas Lundblad viết vào năm 2010, có lỗi.
- Đoạn mã này là lời giải cho bài toán hiển thị số byte theo định dạng con người dễ đọc. Ví dụ, biểu diễn 123.456.789 byte thành "123.5 MB".
- Lời giải của Lundblad dùng log thay vì vòng lặp để tính hậu tố phù hợp (
kB, MB, GB...).
- Đoạn mã này trở thành đoạn mã bị sao chép nhiều nhất sau khi được xác nhận trong một nghiên cứu năm 2018 có tiêu đề "Usage and Attribution of Stack Overflow Code Snippets in GitHub Projects".
- Nghiên cứu phát hiện rằng đa số mọi người khi sao chép mã từ Stack Overflow không kèm theo ghi nguồn phù hợp.
- Lỗi trong đoạn mã của Lundblad là sai số làm tròn khi số byte tiến gần 1 MB. Ví dụ, đầu vào 999.999 byte cho kết quả "1000.0 kB" thay vì "1.0 MB" đúng ra phải có.
- Lundblad đã cung cấp phiên bản mã đã sửa để xử lý vấn đề này cùng các trường hợp biên khác. Bao gồm đầu vào âm và giới hạn độ chính xác của
double.
- Bài viết này rút ra các bài học chính là tầm quan trọng của việc kiểm thử mọi trường hợp biên, sự phức tạp của phép toán số thực dấu chấm động, và nhu cầu ghi nguồn phù hợp khi sao chép mã.
1 bình luận
Ý kiến Hacker News
log(), một lần gọipow(), và việc dùngceil()trong mã, đồng thời cho rằng một cách tiếp cận đơn giản hơn có thể hiệu quả hơn.logsố thực và phép chia áp dụng cho số nguyên trong mã bị chỉ trích là quá phức tạp và dễ phát sinh lỗi.