Công thức chạy sai (1 người xem)

Người dùng đang xem chủ đề này

xangellightx

Thành viên mới
Tham gia
1/11/09
Bài viết
19
Được thích
0
Các anh chị xem và giải thích dùm e sao công thức lại chạy ko đúng với,đáng lẽ là ra kết quả "OK" nhưng nó lại ra " Check"
 

File đính kèm

Các anh chị xem và giải thích dùm e sao công thức lại chạy ko đúng với,đáng lẽ là ra kết quả "OK" nhưng nó lại ra " Check"
Kể cũng lạ, tôi đã kiểm tra, các số tại ô H14 và H15 hoàn toàn trùng khớp, không sai khác một số thập phân nào.
Khi sửa công thức thành =IF(H14=H15,"OK","Check") thì kết quả là "OK", còn khi để công thức là =IF(H15-H14=0,"OK","Check") thì kết quả lại là "Check".
 
Kể cũng lạ, tôi đã kiểm tra, các số tại ô H14 và H15 hoàn toàn trùng khớp, không sai khác một số thập phân nào.
Khi sửa công thức thành =IF(H14=H15,"OK","Check") thì kết quả là "OK", còn khi để công thức là =IF(H15-H14=0,"OK","Check") thì kết quả lại là "Check".

Chuyện thường
Excel luôn có sai sót. Thay vì so sánh bằng không chịu, lại đi làm toán trừ chi cho nó sai
 
hjj, e đang muốn tìm hiểu tại sao nó sai thôi,vì nhiều khi có thể sai format hay gì đó... chứ còn để làm cho ra kết quả thì thiếu gì cách, nói như a thì sau này ko được làm toán trừ nữa ah.
 
Chỉnh sửa lần cuối bởi điều hành viên:
hjj, e đang muốn tìm hiểu tại sao nó sai thôi,vì nhiều khi có thể sai format hay gì đó... chứ còn để làm cho ra kết quả thì thiếu gì cách, nói như a thì sau này ko được làm toán trừ nữa ah.

Cái đó còn tuy
Đã nói rằng Excel luôn có những sai sót (ai mà biết chứ). Để chứng minh, ta làm cuộc thí nghiệm:
- Gõ số 0.001 vào cell A1B1
- Cell A2, gõ công thức: =A1+0.001 rồi kéo fill công thức ở A2 đến cell A100
- Gõ số 0.002 vào cell B2 rồi quét chọn B1:B2, kéo fill xuống đến B100
- Cell C1, gõ công thức =A1=B1 rồi cũng kéo fill xuống đến C100
Giờ kiểm tra xem, từ dòng 72, cột C cho kết quả =FALSE ---> Tại sao vậy? Cóc biết, đúng không?
 
Mình cũng xem mãi rùi ko phát hiện được lỗi. Cái này Anh Bill gates bị nhầm rùi. Bây giờ đưa tin này cho A Bill gates có khi lại có tiền ấy chứ. keke
 
Trong bài trên, H14 và H15 khác nhau ở số thập phân thứ 13.

Số thực có phần thập phân không phải lúc nào cũng có thể diễn tả chính xác theo dạng nhị phân (điều kiện của máy tính). Khi làm toán với số thực trên máy tính người ta phải chấp nhận điều này.

Excel cố gắng tối đa để đơn giản hoá sai số trên. Nhưng có những trường hợp con toán quá phức tạp, Excel không thể đơn giản hoá vì nó không thể đoán nổi thực tế người tính toán có thực sự muốn nó làm vậy hay không?

Phép so sánh hai số thực trong tin học:

Nếu |x - y| < Epsilon ===> x = y

Trong lập trình, thường thường người ta đặt Epsilon = 1E-12
 
Số thực có phần thập phân không phải lúc nào cũng có thể diễn tả chính xác theo dạng nhị phân (điều kiện của máy tính). Khi làm toán với số thực trên máy tính người ta phải chấp nhận điều này.

Chính xác. Cách biểu diễn số thực bằng các bít 0 / 1 và những tính toán trên số thực nhiều khi có những sai số mà ta không nhìn thấy. Mà nếu số thực có phần thập phân vô hạn thì biểu diễn thế nào? Làm sao mà trong máy có thể biểu diễn vô hạn chữ số được?
Cái này gọi là các tính toán trên các số Floating point. Việt Nam mình gọi là "số thực dấu phẩy động"

Chính vì 2 số tưởng chừng bằng nhau nhưng kiểm tra bằng toán tử "=" thì kết quả lại là FALSE nên trong lập trình code chuẩn là code không bao giờ có kiểu

Mã:
do
...
loop until a [B][COLOR=#ff0000]=[/COLOR][/B] b

Nếu ai đó muốn vòng lặp thực hiện tới ngày tận thế thì hãy viết code

Mã:
Sub Button1_Click()
Dim a As Double
    a = 0
    Do
        a = a + 0.1
        Debug.Print a
    Loop Until a [B][COLOR=#ff0000]=[/COLOR][/B] 1
End Sub

Đừng tưởng là vòng lặp thực hiện 10 lần nhé.

Người lập trình có kinh nghiệm thì họ luôn dùng

Mã:
do
...
loop until a [B][COLOR=#ff0000]>=[/COLOR][/B] b  '  hoặc a [B][COLOR=#ff0000]<=[/COLOR][/B] b

Vì lúc đó chắc chắn vòng lặp sẽ kết thúc. Tức nếu là ví dụ trên thì

Mã:
Sub Button1_Click()
Dim a As Double
    a = 0
    Do
        a = a + 0.1
        Debug.Print a
    Loop Until a [B][COLOR=#ff0000]>=[/COLOR][/B] 1
End Sub

Nếu không biết những điều này mà đổ lỗi cho bác Bill thì oan bác Bill quá.
 
Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom