Vì vậy, tôi thường thấy một cái gì đó như thế này:Bao gồm phép tính số học khi xác định một hằng số
#define gf_PI f32(3.14159265358979323846264338327950288419716939937510)
#define gf_PIhalf f32(3.14159265358979323846264338327950288419716939937510 * 0.5)
Điều này có nghĩa rằng giá trị PI nửa được tính mỗi khi tôi sử dụng gf_PIhalf trong mã của tôi, phải không?
Chẳng phải tốt hơn là viết giá trị của một nửa PI chứ?
Nó sẽ không thể tốt hơn để làm như sau:
#define gf_PI f32(3.14159265358979323846264338327950288419716939937510)
const float gf_PIHalf = gf_PI * 0.5f; // PIHalf is calculated once
Cuối cùng nó sẽ không là tốt nhất để làm điều đó như thế này (và tại sao nó dường như không phải là một thực tế phổ biến):
const float gf_PI = 3.14159265358979323846264338327950288419716939937510;
const float gf_PIHalf = gf_PI * 0.5f;
bạn có thực sự quan tâm nếu chương trình của bạn thực hiện một phép nhân nhiều hơn? là nó thực sự quan trọng? – Smash
Đây là một câu hỏi hay. Tôi đã từng hỏi một câu hỏi tương tự về ràng buộc và hiệu quả của bộ nhớ, và tôi nghĩ câu trả lời tiêu chuẩn tôi nhận được tương tự như "Thành thật mà nói, với tốc độ này, nó không quan trọng. Đó là một lượng nhỏ dữ liệu mà tỷ lệ hiệu quả không ' mất nhiều hit. " Tôi nghĩ trong trường hợp này, bạn sẽ thấy rằng hiệu quả của chương trình không nhất thiết phải chịu VS. ý tưởng rằng bạn nhận được phép tính lại mà bạn có thể tin tưởng mọi lúc. Nếu bạn tự tin về số học, tôi sẽ cho hiệu quả thuần túy. – plast1K
Hãy xem, một trình biên dịch tốt sẽ tối ưu hóa [ngay cả một mớ hỗn độn hoàn chỉnh như thế này] (http://stackoverflow.com/questions/15114140/writing-binary-number-system-in-c-code/15114188#15114188) vào một hằng số ... –