Tại sao Bảng tính Google cho biết Zero không bằng Zero?


8

Sau khi dành hàng giờ cố gắng để tìm ra một lỗi trong bảng tính kế toán cá nhân của tôi, tôi có thể xác định nó theo một công thức.

Trong khi điều này dẫn đến Zero

=((0,6-0,3-0,4)+(-0,3+0,8-0,4))

so sánh nó với Zero cho tôi sai

=((0,6-0,3-0,4)+(-0,3+0,8-0,4))=0

Tôi đang thiếu cái quái gì vậy?


2
Bạn đã bao giờ gặp phải những niềm vui của toán học dấu phẩy động?
ale

1
Có, tôi đã làm (theo cách tồi tệ hơn) với Javascript. Nhưng không tính toán toán học Google Spreeadsheet xảy ra phía máy chủ?
bruno

Có lẽ. Tôi sợ tôi không có câu trả lời cho bạn. Tôi chỉ thấy một chút buồn cười là đây là một tên miền khác 0 != 0.
ale

1
Có lẽ bạn có thể kiểm tra xem nó nhỏ hơn hoặc bằng số nhỏ nhất.
aparente001

"Sau khi dành hàng giờ cố gắng để tìm ra một lỗi trong bảng tính kế toán cá nhân của tôi" - thích rằng: D rất vui vì tôi không phải là người duy nhất lãng phí thời gian theo cách này;)
Dòng

Câu trả lời:


6

Nhờ vào sự kỳ diệu của mỹ phẩm điểm nổi ,

((0.6-0.3-0.4)+(-0.3+0.8-0.4))

ước tính đến khoảng -5,55e-17 với độ chính xác gấp đôi. Điều này giữ trong JavaScript cũng như trong Bảng tính Google. Nó không thực sự quan trọng cho dù tính toán là phía máy khách hay phía máy chủ: điều quan trọng là định dạng số được sử dụng. Có vẻ như Google Sheets sử dụng độ chính xác gấp đôi .

Giải pháp là như nhau: tránh so sánh bằng cho các số dấu phẩy động. Trong trường hợp của bạn, thay đổi đơn vị bằng cách nhân mọi thứ với 10 sẽ tránh được vấn đề.


1
Tôi đã đề cập đến "phía máy chủ" bởi vì Google có thể sử dụng loại số thập phân chính xác tùy ý từ ngôn ngữ lập trình yêu thích của họ trong máy chủ của họ.
bruno

Có một nền tảng sử dụng dấu phẩy nhị phân thay vì dấu phẩy động nhị phân: HP48S. Tôi đã làm việc rằng các chữ số thập phân thực tế được lưu trữ trong các gói 4 bit, vì vậy, nhưng thật lãng phí vì không phải tất cả các kết hợp của 4 bit đều được sử dụng. Tôi nhớ rằng tôi đã thử nghiệm bằng cách thay đổi bộ nhớ trực tiếp và thậm chí tạo các chữ số nhiều hơn 9.
Heimdall

Giải pháp của tôi là =FLOOR(B3+C2, 0.01)làm việc với tiền tệ
Phi tuyến
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.