Sự sai lầm của máy vi tính


 

    MINH  LUÂN

E-Mail: minhluan@khoahoc.net

12 tháng 06 năm 2008

         Nếu có 1 quy điều đã ăn sâu vào tâm trí của mọi người, đó là tính bất khả sai sót của tin học : một máy vi tính thì không bao giờ nhầm lẫn. Thật ra việc thiết kế nó đã mắc phải một lỗi nghiêm trọng : nó luôn làm tròn các con số. Và các tính toán của nó có thể đưa ra những kết quả sai lạc khi mô tả các hiện tượng phức tạp.

         Hiện nay người ta đã biết số Pi (π) với hơn 1 tỉ số lẻ chính xác, cũng như có thể lập thừa số (viết dưới dạng tích của nhiều số hạng) một số có vài trăm số hạng, hay tiên liệu đến từng mét vị trí của một phi thuyền được phóng lên quỹ đạo quanh sao Mộc. Tất cả là nhờ máy vi tính để giải quyết những phép tính khổng lồ không thể làm bằng tay. Nếu không phải mất nhiều năm lao động, thậm chí nhiều thế kỷ, và các sai lầm về tính toán có thể xảy ra, do đó sẽ đưa đến kết quả không chính xác. 

         Vào cuối thế kỷ 19, William Shanks bắt tay vào tính toán 700 số lẻ đầu tiên của số Pi. Công việc này mất 20 năm, từ 1855 đến 1874. Đến năm 1947, Douglas Ferguson dùng máy tính cơ điện để tính đến 1.000 số lẻ của Pi. Ông nhận thấy từ số lẻ thứ 528, kết quả của ông không phù hợp với của Shanks.

         Nhiều nhà toán học khác cũng lao vào cuộc, và đều thừa nhận rằng William Shanks đã tính sai. Sau đó các máy tính điện tử giúp con người đi xa hơn, từ việc tính toán những hằng số toán học cho đến lập thừa số của các số nguyên lớn, đến mức hầu như người ta tin tưởng tuyệt đối vào độ tin cậy của máy tính. Thật ra, theo nhà nghiên cứu Jean-François Colonna, sự tin tưởng đó là rất bấp bênh. Dĩ nhiên là khi chỉ tính toán với các số đơn gỉản có ít số hạng, nguy cơ sai lầm sẽ rất thấp và thường dễ phát hiện ra. Nhưng khi cần làm những phép tính lập lại với các số thực, máy tính có thể lệch khỏi sự chặt chẽ tuyệt đối về toán học mà người ta gán cho nó. Để chứng minh, Jean-François Colonna không cần dùng đến các hệ phương trình vi phân phức tạp. Ngay cả một phép tính đơn giản ở trình độ của một học sinh trung học cũng đưa ra kết quả khiến những ai tin tưởng vào tin học cũng đều phải ngỡ ngàng.

         Nên nhớ rằng một phương trình có thể có nhiều cách viết. Như thế, 4*3 + 3*6 (trong tin học, dấu * là phép nhân) có thể viết thành 3*6 + 3*4 hay 3*(4+6). Do vậy (R+1)*X - R*X*X có thể lập thành thừa số dưới dạng ((R+1) - R*X)*X hay X + R*(X - X*X).

         Trong ngôn ngữ Pascal, những thay đổi về cách viết đó không hề ảnh hưởng đến kết quả. Nhung mọi việc sẽ khác nếu là ngôn ngữ Basic hoặc khi người ta sử dụng các máy tính bỏ túi. Với các phép tính lặp lại n lần, các kết quả ngày càng sai lệch ở mỗi lần lặp lại. Ngay cả với các máy tính cực mạnh, chỉ cần thay đổi cách viết phương trình, đến phép tính thứ 70, máy sẽ đưa ra những giá trị từ 1,199 đến 0,000009.  

         Tại sao chiếc máy tính mà người ta tin tưởng một cách tuyệt đối đôi khi lại có thể “loạng choạng” như thế ? Vì lý do rất đơn giản : “Các số thực không có trong máy tính” - Jean-François Colonna giải thích. Số thực có thể là 2, 13 hay 811, hoặc 5/7, Ö3, hoặc nữa là π = 3,14159265... Thế nhưng mạch IC và bộ nhớ của máy vi tính lại không biết đến 5/7 lẫn π hay Ö3. Nó  chỉ biết những số có 8 đến 16 số hạng có ý nghĩa. Đối với máy tính, 5/7 hay căn bậc 2 của 3 được quy thành những giá trị gần đúng là 0,71428571 hay 1,7320508.

         Thật ra 5/7,  căn bậc 2 của 3 và π là những số được viết với vô số số hạng. Chẳng có mạch vi xử lý nào có thể xử lý sự vô hạn, vì thế máy sẽ cắt bỏ phần cuối và giữ lại trong bộ nhớ 5/7 = 0.71428571, điều này hoàn toàn sai trong toán học. Cách này sẽ làm biến mất tính chất kết hợp của phép nhân và phép cộng, do đó sẽ dẫn đến kết quả sai lạc. Thử tính tích số 3,14*(2,71*2,71) và (3,14*2,71)*2,71 với chỉ 2 số lẻ, các bạn sẽ có 2 kết quả khác nhau. Tất nhiên máy vi tính có thể tính đến 12 hay 18 số lẻ, nhưng ảnh hưởng toàn bộ cũng thế, tức là dẫn đến các kết quả chẳng những sai lạc mà lại khác nhau tùy theo cách viết phương trình.

         Trong tính toán đơn giản, một máy vi tính hiếm khi vượt quá 12 số hạng, điều này đủ để thực hiện đa số những phép tính thông thường. Ngược lại, khi có một chuỗi phép nhân, và nhất là nếu liên quan đến một hệ thống nhạy cảm với các điều kiện ban đầu, còn gọi là hỗn độn, khuyết điểm trong phép nhân có thể làm sai lệch kết quả của máy.

 

         Những hiện tượng có tiến trình hỗn độn rất thường gặp trong vật lý học, thiên văn học, sinh học và cả kinh tế học. Chúng được mô tả bằng các phương trình với đạo hàm riêng nhưng không có đáp số giải tích, và người ta giải bằng những phương pháp gần đúng liên tục, việc này lại cần đến nhiều phép tính lặp lại. Do đó, chỉ cần thay máy khác hay thay chương trình cũng đủ để cho ra kết quả hoàn toàn khác nhau.

         Về những khuôn mẫu mô phỏng chuyển động của các hành tinh, chúng chỉ đúng trong trường hợp một hệ thống như của chúng ta, với khối lượng của Trái đất rất nhỏ so với khối lượng của Mặt trời. Cũng nên biết rằng khi phóng phi thuyền, người ta vẫn phải điều chỉnh nhiều lần so với quỹ đạo đã tính trước.

         Với các máy tính hiện nay, để chắc chắn về kết quả, cần phải áp dụng phương pháp tính toán gọi là “đa chính xác”. Nhưng phương pháp này có khuyết điểm là mất rất nhiều thời gian, mà thời gian này lại tăng lũy thừa với độ chính xác mong muốn. Nói cách khác, làm những phép tính có hàng trăm lần tính lặp lại với các số có hàng trăm số hạng có thể sẽ mất nhiều tuần lễ, nhiều năm hay thậm chí hàng thế kỷ.

 

 

                                                                                                                      MINH  LUAÂN

                                                                                                                  (theo Science & Vie)

Trở về Trang Chính