Ai cũng biết rằng trong C, các ký tự dấu phẩy động (ví dụ 1.23
) có kiểu double
. Kết quả là, bất kỳ phép tính nào liên quan đến chúng đều được tăng gấp đôi.
Tôi đang làm việc trên một hệ thống thời gian thực được nhúng có đơn vị dấu phẩy động chỉ hỗ trợ các số chính xác ( float
) duy nhất . Tất cả các biến của tôi là đủ float
, và độ chính xác này là đủ. Tôi không cần (cũng như không đủ khả năng) double
chút nào. Nhưng mỗi khi một cái gì đó như
if (x < 2.5) ...
được viết, thảm họa xảy ra: sự chậm lại có thể lên đến hai bậc của cường độ. Tất nhiên, câu trả lời trực tiếp là viết
if (x < 2.5f) ...
nhưng điều này rất dễ bị bỏ sót (và khó phát hiện cho đến khi quá muộn), đặc biệt là khi giá trị 'cấu hình' nằm #define
trong một tệp riêng biệt của một nhà phát triển kém kỷ luật (hoặc chỉ mới).
Vì vậy, có cách nào để buộc trình biên dịch coi tất cả các ký tự (dấu phẩy động) là float, như thể với hậu tố f
? Ngay cả khi nó chống lại các thông số kỹ thuật, tôi không quan tâm. Hoặc bất kỳ giải pháp nào khác? Nhân tiện, trình biên dịch là gcc.
-Wdouble-promotion
, điều này ít nhất sẽ cung cấp cho bạn cảnh báo. Kết hợp với-Wfloat-conversion
nên cho độ che phủ khá tốt.