Có phải mọi người đã quên Pascal?
1/6
năng suất 0.1666666...
(cho bất cứ độ chính xác nào được hỗ trợ).
1 div 6
sản lượng 0
Người ta tranh cãi liệu quy tắc C có phải là một sai lầm hay không. Hầu như tất cả các toán tử số học của C, trong đó các toán hạng cùng loại, mang lại kết quả cùng loại. Có một cái gì đó để nói về tính nhất quán.
Hơn nữa, vì C chủ yếu nhắm vào mã cấp hệ thống, hầu hết các chương trình C hoàn toàn không sử dụng dấu phẩy động. Tại một thời điểm, việc vô tình thêm mã dấu phẩy động vào một chương trình mà không cần nó có thể là một vấn đề nghiêm trọng. Đó có lẽ vẫn là trường hợp, đối với các hệ thống nhúng nhỏ - một lần nữa, là mục tiêu chính của C.
Trong hầu hết các chương trình C, việc chia số nguyên có thể chỉ là những gì bạn muốn.
Nếu 1 / 6
mang lại kết quả dấu phẩy động trong C, thì:
- Nó sẽ là một sự không nhất quán trong ngôn ngữ.
- Tiêu chuẩn này sẽ phải thực hiện một sự lựa chọn tùy ý mà dấu chấm động loại để sử dụng cho kết quả (
double
có vẻ như sự lựa chọn tự nhiên, nhưng bạn có thể thích sự chính xác thêm long double
)
- Ngôn ngữ vẫn sẽ phải có một hoạt động để phân chia số nguyên; thực hiện bổ sung dấu phẩy động và sau đó cắt ngắn có thể sẽ không đủ tốt.
C có thể đã cung cấp các toán tử riêng cho hai loại phép chia, nhưng điểm thứ hai ở trên vẫn sẽ được áp dụng: loại nào trong ba loại dấu phẩy động sẽ được sử dụng cho kết quả? Và vì nó đủ dễ dàng để có được phép chia điểm trôi nổi nếu bạn cần nó (sử dụng hằng số dấu phẩy động cho một hoặc cả hai toán hạng, hoặc chuyển một hoặc cả hai toán hạng thành loại dấu phẩy động), rõ ràng nó không phải là ' t coi đó là quan trọng.
Trong phiên bản 1974 của hướng dẫn sử dụng C (tức là 4 năm trước khi xuất bản phiên bản đầu tiên của K & R), Ritchie thậm chí không đề cập đến sự nhầm lẫn có thể xảy ra:
Các nhị phân / toán tử chỉ ra sự phân chia. Các cân nhắc cùng loại như áp dụng cho phép nhân
trong đó nói rằng nếu cả hai toán hạng là loại int
hoặc char
, kết quả là loại int
.
Vâng, đó là một nguồn gây nhầm lẫn cho một số lập trình viên C, đặc biệt là người mới bắt đầu - nhưng C không được chú ý vì rất thân thiện với người mới.