Bài tập về nhà gần đây tôi nhận được yêu cầu chúng tôi thực hiện các biểu thức có thể tạo ra sự mất chính xác khi được thực hiện trong máy tính và thay đổi chúng để tránh mất mát này.Thuật toán tốt nhất để tránh mất độ chính xác?
Thật không may, các hướng dẫn thực hiện việc này chưa được thực hiện rất rõ ràng. Từ xem các ví dụ khác nhau được thực hiện, tôi biết rằng có một số phương pháp làm điều này: sử dụng chuỗi Taylor, sử dụng liên hợp nếu rễ vuông có liên quan, hoặc tìm một mẫu số chung khi hai phân số đang được trừ.
Tuy nhiên, tôi gặp một số sự cố khi nhận thấy chính xác khi nào mất chính xác sẽ xảy ra. Cho đến nay điều duy nhất tôi biết chắc chắn là khi bạn trừ đi hai con số gần giống nhau, sự mất chính xác xảy ra vì các số thứ tự cao là đáng kể và bạn mất những số đó từ vòng tròn.
Câu hỏi của tôi là một số tình huống phổ biến khác mà tôi nên tìm kiếm, và những gì được coi là phương pháp 'tốt' để tiếp cận chúng?
Ví dụ, đây là một vấn đề:
f(x) = tan(x) − sin(x) when x ~ 0
thuật toán tốt nhất và tồi tệ nhất cho việc đánh giá này ra khỏi ba lựa chọn là gì:
(a) (1/ cos(x) − 1) sin(x),
(b) (x^3)/2
(c) tan(x)*(sin(x)^2)/(cos(x) + 1).
Tôi hiểu rằng khi x gần số không, tan (x) và sin (x) gần như giống nhau. Tôi không hiểu làm thế nào hoặc tại sao bất kỳ thuật toán nào tốt hơn hoặc tệ hơn để giải quyết vấn đề.