Gặp lỗi ở code VBA

Liên hệ QC

Ton Ton

Thành viên mới
Tham gia
22/9/22
Bài viết
4
Được thích
0
Mình có lập trình một đoạn code vba như hình bên dưới. Nhưng chạy xong thì kết quả tính toán lại bị sai. Mọi người giúp mình với.
1663833487766.png
 
Sai thế nào?
Kết quả đúng là bao nhiêu?
 
Upvote 0
BẠn gửi file xem nào?
 
Upvote 0
Làm việc với số thực phải chấp nhận sai số là đương nhiên rồi.

Gõ =80.4+105.7+93.3-64-200-15.4 vào cell A1 cũng trả về kết quả khác 0. Đâu cần thử VBA.

Kết quả 5.32E-15 thì cũng ~ 0 rồi. Chấp nhận sai số tí xíu.
 
Upvote 0
Làm việc với số thực phải chấp nhận sai số là đương nhiên rồi.

Gõ =80.4+105.7+93.3-64-200-15.4 vào cell A1 cũng trả về kết quả khác 0. Đâu cần thử VBA.

Kết quả 5.32E-15 thì cũng ~ 0 rồi. Chấp nhận sai số tí xíu.
Nhưng tại sao lại có sai số như vậy ạ? Có cách nào để sữa lỗi này không ạ ?
 
Upvote 0
Bạn đọc bài #8 của tôi. Trong đó có link, bạn tự dịch và đọc thì sẽ hiểu.


Link trong bài #8

 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn mọi người ạ. Mình đã hiểu vấn đề.
 
Upvote 0
Làm việc với số thực phải chấp nhận sai số là đương nhiên rồi.

Gõ =80.4+105.7+93.3-64-200-15.4 vào cell A1 cũng trả về kết quả khác 0. Đâu cần thử VBA.

Kết quả 5.32E-15 thì cũng ~ 0 rồi. Chấp nhận sai số tí xíu.

Thì bạn thêm 1 câu lệnh điều kiện, như
If Khi_Moc < (10)^ (-13) Then Khi_Moc = 0

Nhưng tại sao lại có sai số như vậy ạ? Có cách nào để sữa lỗi này không ạ ?

Căn bản lập trình. Đã bước vào lập trình thì phải biết nó.
Tính toán với số thực LUÔN LUÔN có sai số. Cứ nhớ con số PI thì lấy đến bao nhiêu số lẻ mới gọi là chính xác?

Khi lập trình với số thực thì phải tự xác định trước là code của mình sẽ chấp nhận sai số ở hàng thứ mấy, 10^-6, -9, -12,... ?
Đó là điều bắt buộc. Khi tôi còn làm ở khâu kiểm tra code, đây là một trong những điểm tôi sẽ xét.

Với người kinh nghiệm thì code Module tự khai báo trước một Constant Epsilon = 1E-6 (hay 9, ... gì gì đó). Cứ Abs(a) < Epsilon thì coi như a = 0. Cứ Abs(a-b) < Epsilon thì coi như a = b.
Code khong bao giờ xét IF a = b, mà phải xét IF Abs(a - b) < Epsilon
 
Upvote 0
Web KT
Back
Top Bottom