menu
0,000000095 Giây - Khi một sai số siêu nhỏ được chấp nhận vẫn có thể làm thay đổi cả phân tích tính toán
Trương Đắc Nguyên Vip
24HMoney đã kiểm duyệt 24HMONEY đã kiểm duyệt

0,000000095 Giây - Khi một sai số siêu nhỏ được chấp nhận vẫn có thể làm thay đổi cả phân tích tính toán

Đọc bài này để thấy những lỗi tính toán, những điểm mù trong phân tích rất nhỏ có thể đẩy sai lệch ra lớn cỡ nào. Và tôi cũng từng mắc phải 1 lỗi như thế.

 

0,000000095 Giây - Khi một sai số siêu nhỏ được chấp nhận vẫn có thể làm thay đổi cả phân tích tính toán

Ngày 25/02/1991, trong Chiến tranh Vùng Vịnh, một quả tên lửa lao trúng doanh trại Mỹ ở Ả Rập Xê Út khiến 28 binh sĩ Mỹ thiệt mạng.

Nhưng đáng nói là hệ thống phòng vẫn đang hoạt động ở đó. Radar vẫn quét, máy tính vẫn xử lý dữ liệu và các phép tính vẫn được thực hiện theo đúng chương trình. Nhưng hệ thống phòng không Patriot đã không đánh chặn ... dù nó hoàn toàn có khả năng.

Cuộc điều tra của quân đội Mỹ sau đó đã tìm ra một nguyên nhân rất khó tin:

Sai số chỉ khoảng 0,000000095 giây trong phép tính thời gian mặc định, không phải lỗi của máy tính.

Một con số nhỏ đến mức gần như vô nghĩa trong đời sống hằng ngày.

Vậy tại sao một sai số chưa đến một phần mười triệu giây lại có thể dẫn đến hậu quả lớn như vậy?

Câu chuyện bắt đầu từ cách máy tính lưu trữ những con số.

Đồng hồ của hệ thống phòng không Patriot đếm thời gian theo từng nhịp 0,1 giây. Để biết đã trôi qua bao nhiêu thời gian, máy tính sẽ lấy = số nhịp đã đếm x 0,1 giây

Đó là việc đơn giản, nhưng ...chuyện không ai ngờ số 0,1 khi chuyển sang hệ nhị phân của máy tính sử dụng lại trở thành một dãy chữ số kéo dài quá mức lưu trữ của máy tính(cụ thể là nó dài vô tận).

Nên bộ nhớ máy tính đã cắt bỏ chỉ giữ lại 24 chữ số nhị phân. Kết quả là số nhị phân rút gọn đó, khi quy đổi ra được giá trị khoảng 0,0999999046 giây rất rất gần với giá trị 0,1 giây

Chênh lệch chỉ khoảng 0,000000095 giây cho mỗi nhịp đếm, một sai số gần như không đáng kể nếu nhìn riêng lẻ. Nhưng khi hệ thống vận hành liên tục 100 giờ, tương đương 3,6 triệu nhịp, sai số trong phép quy đổi thời gian đã tích lũy lên :

3,6 triệu x 0,000000095 giây = 0,34 giây.

Đó là việc đã xảy ra, phòng không Patriot của Mỹ đã lệch 0,34 giây.

Tuy nhiên, 0,34 giây vẫn là một khoảng thời gian rất ngắn. Tại sao nó lại nghiêm trọng đến vậy?

Nếu bạn mang một bao gạo 50 kg đi cân, sai lệch 1 gram gần như không có ý nghĩa gì. Nhưng nếu mang vàng đi cân, sai lệch 1 gram lại là một câu chuyện hoàn toàn khác.

Cùng một sai số, nhưng mức độ nghiêm trọng phụ thuộc vào thứ mà chúng ta đang đo.

Ở đây cần 0,34 giây này cho một tên lửa di chuyển khoảng 1.676 mét mỗi giây, sai số thời gian 0,34 giây và môi trường đã tạo ra quãng đường lệch 687 mét.

Khi sai số thời gian làm vị trí dự đoán lệch đi, quả tên lửa đã thoát khỏi vùng nhỏ mà phòng không kiểm soát. Và đó là điều đã xảy ra.

----

Câu chuyện này không tự nhiên mình tìm đọc, mà cách đây 2 năm mình cũng có một trải nghiệm trong công việc phân tích đầu tư.

Trước đây, khi nghiên cứu hiệu quả dài hạn của một phương pháp đánh giá cổ phiếu, mình phải xử lý dữ liệu giao dịch kéo dài nhiều năm với khối lượng tính toán lên đến hàng triệu phép.

Để tiết kiệm thời gian, mình nhờ một bạn trợ lý chuẩn bị và làm sạch dữ liệu đầu vào và bạn ấy làm phần lớn công việc khá tốt.

Nhưng khi chạy phân tích, kết quả lại khác xa những gì mình tự tính bằng trên một mẫu.

Đầu tiên của mình là nghĩ rằng code có vấn đề, mình ngồi kiểm tra lại từng phần, chạy lại những đoạn nghi ngờ, đối chiếu các phép tính. Mất gần cả ngày mà vẫn không tìm ra lỗi.

Cuối cùng, mình quyết định quay lại kiểm tra dữ liệu đầu vào, so sánh với dữ liệu gốc trước khi được làm sạch và lúc đó mới phát hiện một chi tiết:

Có một giá trị tính tăng trưởng đang được lưu là 0,01 nhưng giá trị tính toán kĩ của nó thực ra là 0,0107.

Nghĩa là một phép tính ra lợi nhuận 1,07% đã bị làm tròn thành 1%.

Bạn trợ lý đã chọn làm tròn các giá trị tính toán còn hai chữ số sau dấu phẩy. Việc làm tròn ấy được áp dụng cho cả tập dữ liệu.

Và khi những giá trị này tiếp tục đi qua hàng vạn phép tính, được sử dụng để tính lợi suất tích lũy, so sánh với các ngưỡng và chấm điểm cổ phiếu, kết quả cuối cùng bị phóng đại lên rất nhiều

Mất cả ngày cuối cùng hóa rả vấn đề từ những chuyện bình thường.

Ở vụ tên lửa, sai số trong giới hạn lưu thời gian khiến 1 sai lệch siêu nhỏ bị tích lũy và làm vị trí dự đoán của tên lửa lệch ra ngoài vùng quét.

Vụ của mình cũng là sai số trong xử lý số liệu cho dễ nhìn.

Nhưng nói chung đều thấy cẩn trọng hơn với một số nguyên tắc khi làm việc với dữ liệu:

Không thể đánh giá sai số chỉ bằng việc nhìn vào số chữ số sau dấu phẩy, mà phải đặt nó trong tương quan với đại lượng đang đo. Sai số 0,005 gần như không đáng kể nếu giá trị gốc là 100, nhưng lại bằng một nửa nếu giá trị gốc chỉ là 0,01.

Và nguy hiểm hơn, khi những sai số nhỏ ấy liên tục được tích lũy qua nhiều phép tính, chúng có thể tạo ra sai lệch rất lớn ở kết quả cuối cùng.

---

Cre: Trương Đắc Nguyên

*Nguồn tham khảo: U.S. General Accounting Office (1992), Patriot Missile Defense: Software Problem Led to System Failure at Dhahran, Saudi Arabia, GAO/IMTEC-92-26;

Cảnh báo Nhà đầu tư lưu ý
Cảnh báo
Theo dõi 24HMoney trên GoogleNews

Theo dõi người đăng bài

Kết nối truyền thông
cùng 24HMONEY ?

Liên hệ tư vấn ngay

Bạn muốn trở thành
VIP/Pro ?

Đăng ký ngay