Tôi đang phát triển một thư viện các chức năng toán học có mục đích đặc biệt trong C. Tôi cần cung cấp khả năng cho thư viện để xử lý cả độ chính xác đơn và độ chính xác gấp đôi. Điểm quan trọng ở đây là các hàm "đơn" nên sử dụng số học "đơn" duy nhất trong nội bộ (resp. Cho các hàm "double").Thiết kế đúng mã C xử lý cả điểm nổi chính xác đơn và đôi?
Như minh hoạ, hãy xem LAPACK (Fortran), cung cấp hai phiên bản của từng chức năng của nó (SINGLE và DOUBLE). Ngoài ra, thư viện toán học C (ví dụ: expf và exp).
Để làm rõ, tôi muốn hỗ trợ một cái gì đó tương tự như sau (giả tạo) ví dụ:
float MyFloatFunc(float x) {
return expf(-2.0f * x)*logf(2.75f*x);
}
double MyDoubleFunc(double x) {
return exp(-2.0 * x)*log(2.75*x);
}
Tôi đã nghĩ về những phương pháp sau đây:
Sử dụng macro cho tên hàm . Điều này vẫn yêu cầu hai mã nguồn riêng biệt:
#ifdef USE_FLOAT #define MYFUNC MyFloatFunc #else #define MYFUNC MyDoubleFunc #endif
Sử dụng macro cho các loại dấu phẩy động. Điều này cho phép tôi để chia sẻ các codebase qua hai phiên bản khác nhau:
#ifdef USE_FLOAT #define NUMBER float #else #define NUMBER double #endif
Chỉ cần phát triển hai thư viện riêng, và quên đi những cố gắng tiết kiệm nhức đầu.
Có ai có đề xuất hoặc đề xuất bổ sung không?
Vâng, cảm ơn vì điểm xuất sắc đó. Mục tiêu ở đây là để giảm tốc độ thực hiện của "đơn" so với lợi thế chính xác của "gấp đôi". –