Trong các thuật toán tối ưu hóa nhất định, lựa chọn giữa double
và float
là không thực hiện nhiều yêu cầu về không gian hơn tốc độ. Ví dụ: với các phương pháp hình phạt hoặc rào cản được sử dụng cho phương pháp điểm nội tuyến trong tối ưu hóa phi tuyến, float
không đủ chính xác so với double
và sử dụng float
giây trong thuật toán sẽ mang lại rác thải. Vì lý do này, hình phạt và phương pháp rào cản đã không được sử dụng trong những năm 1960, nhưng được tái khám phá sau này với sự ra đời của loại dữ liệu chính xác kép. (Để biết thêm về các phương pháp này, hãy tham khảo Lập trình phi tuyến: Kỹ thuật giảm thiểu không bị giới hạn tuần tự (Kinh điển trong Toán học ứng dụng) bởi Fiacco và McCormick.)
Một xem xét khác là điều kiện của các hệ thống tuyến tính cơ bản được giải quyết trong nhiều thuật toán tối ưu hóa. Nếu các hệ thống tuyến tính mà bạn đang giải quyết trong một cái gì đó giống như một phép lặp Newton là đủ điều kiện, bạn sẽ không thể có được một giải pháp chính xác cho các hệ thống đó.
Chỉ khi mất chính xác sẽ không gây nguy hiểm cho số học của bạn, bạn nên cân nhắc thay thế double
s bằng float
s; ngay cả khi các ràng buộc về không gian buộc bạn phải làm như vậy, bạn nên đảm bảo rằng độ chính xác của các kết quả bằng số của bạn không bị xâm phạm. Khi đủ chính xác được đảm bảo cho các vấn đề bạn đang làm việc, bạn có thể lo lắng về không gian và tối ưu hóa hiệu suất. Bạn có thể sử dụng CUTEr test set để xác thực các quy trình tối ưu hóa của mình.
Nguồn
2012-03-17 23:26:46
Nếu bạn viết mã của riêng bạn bằng C++ tại sao bạn chưa gắn thẻ câu hỏi phù hợp? Tôi có thiếu thứ gì đó tinh tế không? –
@HighPerformanceMark Tôi đang đi qua mã trong python (đặc biệt là nguồn scipy) và c + +, và writting thói quen của riêng tôi kết hợp một số phương pháp. Tôi cũng nên gắn thẻ C++. – octoback
Ngoài những điều được đề cập, để phân chia và căn bậc hai, sự khác biệt về hiệu suất giữa float và double là khá lớn. Tuy nhiên, những hoạt động đó nên tránh trong mã hiệu suất. – harold