Excel tính toán và so sánh cho kết quả sai

Liên hệ QC

XUANHOADK7

Thành viên mới
Tham gia
24/9/18
Bài viết
15
Được thích
0
Các pro giúp em. em có một vài số liệu và em thực hiện 1 phép cộng bằng hàm sum và 1 phép cộng kết hợp phép nhân vì có nhiều số giống nhau nhau nhưng khi dùng phép so sánh bằng thì kết quả trả về True , false k nhất quán, mặc dù nhìn mắt thường cũng thấy nó bằng nhau. các số liệu ví dụ em có ghi trong file. mong các Pro xem và giải đáp giúp e.
 

File đính kèm

  • so sanh .xlsx
    9.2 KB · Đọc: 11
Các pro giúp em. em có một vài số liệu và em thực hiện 1 phép cộng bằng hàm sum và 1 phép cộng kết hợp phép nhân vì có nhiều số giống nhau nhau nhưng khi dùng phép so sánh bằng thì kết quả trả về True , false k nhất quán, mặc dù nhìn mắt thường cũng thấy nó bằng nhau. các số liệu ví dụ em có ghi trong file. mong các Pro xem và giải đáp giúp e.
Mắt thường là 1 chuyện, còn thực tế là chuyện khác, trong tính toán máy tính luôn có sai số
Vì thế thử kết hợp hạm ROUND xem sao
 
Mắt thường là 1 chuyện, còn thực tế là chuyện khác, trong tính toán máy tính luôn có sai số
Vì thế thử kết hợp hạm ROUND xem sao
khi kết quả so sánh false thì em copy kết quả ở ô sum và paste value thì nó xuất hiện số 1 sau dấu chấm thập phân 11 số. k hiểu nó ở đâu ra.thay số 8093 bằng 8094, 8095...thì k bị như vậy. bác mở file của e gửi test thử sẽ thấy rất bất cập.
 
khi kết quả so sánh false thì em copy kết quả ở ô sum và paste value thì nó xuất hiện số 1 sau dấu chấm thập phân 11 số. k hiểu nó ở đâu ra.thay số 8093 bằng 8094, 8095...thì k bị như vậy. bác mở file của e gửi test thử sẽ thấy rất bất cập.
Không bất cập đâu, mà là điều hiển nhiên sai số phải chấp nhất khi sử dụng máy tính (computer)
 
Không bất cập đâu, mà là điều hiển nhiên sai số phải chấp nhất khi sử dụng máy tính (computer)
bác có thử file em đính kèm chưa? thay số 8093 bằng 8094 xem sao. phép tính rất đơn giản, mà excel lại phức tạp hóa nó lên rồi đánh lừa người dùng.
 
bác có thử file em đính kèm chưa? thay số 8093 bằng 8094 xem sao. phép tính rất đơn giản, mà excel lại phức tạp hóa nó lên rồi đánh lừa người dùng.
Phức tạp hay không, thì muốn biết tại sao xảy ra sai số kiểu vậy, thì hãy tìm và đọc lại nguyên lý tính toán của máy tính (computer) nhé: mã hóa chuyển đổi sang nhị phân thế nào, dẫn đễn sai số
Sử dụng computer thì phải chấp nhận và quản lý được chuyện này
 
vâng, cảm ơn bác,cũng hiểu nó phải làm theo 1 nguyên lý, Nếu bác hiểu nguyên lý thì phân tích giúp em, e bội phục. cũng 2 con số đó copy và paste value sang 2 ô khác so sánh vẫn false, nhưng lần lượt click đúp chuột vào 2 ô vừa paste xong click sang ô khác kết quả biến thành True. Đây là 1 tình huống thực tế em gặp nên muốn chia sẻ và mong nhận đc sự giải đáp của 1 người thực sự có chuyên môn sâu.
 
Phức tạp hay không, thì muốn biết tại sao xảy ra sai số kiểu vậy, thì hãy tìm và đọc lại nguyên lý tính toán của máy tính (computer) nhé: mã hóa chuyển đổi sang nhị phân thế nào, dẫn đễn sai số
Sử dụng computer thì phải chấp nhận và quản lý được chuyện này
Ở diễn đàn này cứ một vài tháng thì lại thấy bài phàn nàn về cái vụ "không chính xác" này.
Bạn cứ bảo người hỏi tìm trên diễn đàn sẽ thấy ít nhất chục thớt.

bác có thử file em đính kèm chưa? thay số 8093 bằng 8094 xem sao. phép tính rất đơn giản, mà excel lại phức tạp hóa nó lên rồi đánh lừa người dùng.
Không cần phải thử gì hết. Nguyên lý máy tính ai cũng hiểu rõ, chỉ mình bạn không hiểu rồi quýnh quáng đổ thừa lừa lọc này nọ.

...cũng 2 con số đó copy và paste value sang 2 ô khác so sánh vẫn false, ...
Khi copy+paste Excel không luôn luôn bảo đảm là sẽ tính lại. Một trong những cách refresh để buộc nó tính lại là double-click.
 
Ở diễn đàn này cứ một vài tháng thì lại thấy bài phàn nàn về cái vụ "không chính xác" này.
Bạn cứ bảo người hỏi tìm trên diễn đàn sẽ thấy ít nhất chục thớt.


Không cần phải thử gì hết. Nguyên lý máy tính ai cũng hiểu rõ, chỉ mình bạn không hiểu rồi quýnh quáng đổ thừa lừa lọc này nọ.
[/QUOT
Bài đã được tự động gộp:

Bác cũng k hiểu và đang đổ thừa cho nguyên lý đó thôi. bác phán đại chứ biết nguyên lý thpaaj phân nhị phân là gì
 
Bài đã được tự động gộp:

Bác cũng k hiểu và đang đổ thừa cho nguyên lý đó thôi. bác phán đại chứ biết nguyên lý thpaaj phân nhị phân là gì
mình lo lắng cho tương lai của bác trên diễn đàn này quá, không biết lần sau bác hỏi còn ai vào trả lời không
 
Nhiều năm trước diễn đàn này đã biết cái lỗi này rồi. Và thực ra cái người làm ra excel này cũng biết lỗi đó. Vậy mà đến bây giờ đã sửa được đâu.
Thôi thì dùng là phải chấp nhận
 
A1 = 0.8-0.6-0.3

B1 =0.8-0.3-0.6

Cell C1 nhập công thức: =A1=B1 => kết quả là FALSE
 
Nhiều năm trước diễn đàn này đã biết cái lỗi này rồi. Và thực ra cái người làm ra excel này cũng biết lỗi đó. Vậy mà đến bây giờ đã sửa được đâu.
Thôi thì dùng là phải chấp nhận
Nói theo bạn thì nó là lỗi?
...Bác cũng k hiểu và đang đổ thừa cho nguyên lý đó thôi. bác phán đại chứ biết nguyên lý thpaaj phân nhị phân là gì
Nghé con chưa có sẹo có sừng.
Việc "lỗi của nghười dùng khi so sánh số thực""cách khắc phục" tôi đã viết trên diễn đàn này vài lần rồi.

Ở diễn đàn này có tối đa là 3 người biết về Toán Đại Số Chân Lý (Boolean Algebra) ngang với tôi thôi.

Thập phân-nhị phân:
Tôi làm việc với processors của DEC (hệ bát phân), và của Intel từ máy 4004 (4 bit) đến 8085 (8 bit), 8086 (16 bit) từ mấy chục năm trước, viết mã máy thường xuyên.
Ở diễn đàn này không có mấy người biết Toán Đại Số Các Hệ ngang trình tôi đâu.
 
Lần chỉnh sửa cuối:
Bác cũng k hiểu và đang đổ thừa cho nguyên lý đó thôi. bác phán đại chứ biết nguyên lý thpaaj phân nhị phân là gì

Nói theo bạn thì nó là lỗi?

Nghé con chưa có sẹo có sừng.
Việc "lỗi của nghười dùng khi so sánh số thực""cách khắc phục" tôi đã viết trên diễn đàn này vài lần rồi.

Ở diễn đàn này có tối đa là 3 người biết về Toán Đại Số Chân Lý (Boolean Algebra) ngang với tôi thôi.

Thập phân-nhị phân:
Tôi làm việc với processors của DEC (hệ bát phân), và của Intel từ máy 4004 (4 bit) đến 8085 (8 bit), 8086 (16 bit) từ mấy chục năm trước, viết mã máy thường xuyên.
Ở diễn đàn này không có mấy người biết Toán Đại Số Các Hệ ngang trình tôi đâu.
Ở đời, có những người thuộc những dạng:
- "Điếc không sợ súng" (Dân gian)
- "Chưa thấy quan tài chưa đổ lệ" (Cải lương)
- "Không biết cái gì cũng nói" (Má mấy đứa ở nhà + Sếp các cấp)
- "...Chưa nghĩ ra...." (Phim võ thuật - kiếm hiệp)

- Nhiều nữa ...
Dính chiêu nào thì "gáng mà chịu"!
 
Các pro giúp em. em có một vài số liệu và em thực hiện 1 phép cộng bằng hàm sum và 1 phép cộng kết hợp phép nhân vì có nhiều số giống nhau nhau nhưng khi dùng phép so sánh bằng thì kết quả trả về True , false k nhất quán, mặc dù nhìn mắt thường cũng thấy nó bằng nhau. các số liệu ví dụ em có ghi trong file. mong các Pro xem và giải đáp giúp e.
Ta thống nhất là phép toán trên máy tính với các số thực dấu phẩy động (floating-point number) có thể cho kết quả gần đúng.
Bạn chỉ thắc mắc là tại sao K1 <> G17? Vì bạn hiểu là dù cho cả 2 kết quả có là gần đúng thì chúng phải gần đúng "y như nhau", sai số phải "y như nhau". Tức 2 kết quả phải bằng nhau.

Nhưng thực tế thì G17=K1 trả về FALSE. Tại sao? Tôi cho là do thứ tự tính toán. Khi tính một biểu thức thì có những kết quả chung gian. Không thể tính tổng 17 số trong 1 nốt nhạc. Sẽ có những kết quả chung gian. Vd tổng a + b + c. Sẽ có tổng chung gian là A = a + b. Nói cách khác thì trước tiên sẽ tính tổng (a + b). Tiếp theo tính tổng A + c. Tùy theo thứ tự tính a + b + c hay a + c + b mà kết quả chung gian có thể có sai số khác nhau, dẫn đễn tổng (a + b ) + c <> (a + c) + b

Vì thế nếu
G17 = SUM(F1:F17) = (8093 + 1720) + 1,02 + 1,02 + ... + 173 = ((8093 + 1720) + 1,02) + 1,02 + ... + 173 = ...

K1 = F1+1720+1,02*13+173 = (8093 + 1720) + 1,02*13 + 173 = ((8093 + 1720) + 1,02*13) + 173

thì có thể sảy ra G17 <> K1.
 
...Vì thế nếu
G17 = SUM(F1:F17) = (8093 + 1720) + 1,02 + 1,02 + ... + 173 = ((8093 + 1720) + 1,02) + 1,02 + ... + 173 = ...

K1 = F1+1720+1,02*13+173 = (8093 + 1720) + 1,02*13 + 173 = ((8093 + 1720) + 1,02*13) + 173

thì có thể sảy ra G17 <> K1.
Bác lập dữ liệu như thế này:
1590070817319.png
Sau đó, bác từ từ delete từng dòng chứa 1.02
Kết quả sẽ bằng TRUE sau khi delete 2 dòng (tức là 1.02*11). Lưu ý máy của tôi là Mac, Windows có thể ra kết quả hơi khác một chút.
1590071093330.png

Do thứ tự tính thì tôi đồng ý 100%. Chỉ có điều tôi chưa rõ là bên trong Excel, con toán tính theo thứ tự răm rắp trái sang phải, hay Excel có một cách tính tối ưu nào đó? hay chính cái Math co-processor có cách tối ưu của nó? Ví dụ toán cộng nó chia ra nhiều luồng, mỗi luồng tính một đoạn?
 
Bác lập dữ liệu như thế này:
View attachment 237766
Sau đó, bác từ từ delete từng dòng chứa 1.02
Kết quả sẽ bằng TRUE sau khi delete 2 dòng (tức là 1.02*11). Lưu ý máy của tôi là Mac, Windows có thể ra kết quả hơi khác một chút.
View attachment 237767

Do thứ tự tính thì tôi đồng ý 100%. Chỉ có điều tôi chưa rõ là bên trong Excel, con toán tính theo thứ tự răm rắp trái sang phải, hay Excel có một cách tính tối ưu nào đó? hay chính cái Math co-processor có cách tối ưu của nó? Ví dụ toán cộng nó chia ra nhiều luồng, mỗi luồng tính một đoạn?
Thực ra ví dụ tôi đưa ra chỉ có tính chất minh họa, dùng để giải thích. Tất nhiên các qui tắc như trong ngoặc tính trước, phép nhân tính trước phép cộng phải được giữ nguyên. Nhưng dù có tính trước a + b = A1, a + c = A2, c + b = A3 hay gì chăng nữa khi phải tính tổng a + b + c, thì rất có thể A1, A2 và A3 sẽ được tính với các sai số khác nhau, tùy giá trị thực của chúng. Và kết quả là 3 tổng (a+b)+c, (a+c)+b, (c+b)+a sẽ được tính với các sai số khác nhau. Lúc đó so sánh sẽ cho FALSE.
 
Web KT
Back
Top Bottom