6

Trên một vài hệ thống đôi có cùng độ dài gấp đôi. Làm thế nào tôi có thể phát hiện nếu độ dài gấp đôi có độ chính xác mở rộng gấp đôi so với thời gian biên dịch và sử dụng nó để biên dịch có điều kiện.cách phát hiện nếu độ dài gấp đôi có độ chính xác mở rộng hay không ở thời gian biên dịch

tôi thấy có những macro được xác định trước hiện diện trong libgcc SIZEOF_DOUBLESIZEOF_LONG_DOUBLE Nhưng không có di động qua dãy công cụ khác nhau.

Có cách nào để thực hiện điều này không?

+0

Bạn có thể thử 'sizeof (double)> 8'. Mặc dù không di động hoặc là, nó có lẽ sẽ vẫn hoạt động trong hầu hết các trường hợp. – Mysticial

+0

Bạn không thể kiểm tra 'sizeof (double)

+2

Bộ tiền xử lý không nhận ra 'sizeof'. –

Trả lời

5

Bạn có thể so sánh DBL_MANT_DIGLDBL_MANT_DIG từ float.h.

1

Bạn có thể kiểm tra ví dụ:

#if DBL_MANT_DIG < LDBL_MANT_DIG 

hoặc tương đương giá trị quy định tại float.h

0

"đúng" giải pháp cho vấn đề này (như được sử dụng bởi nhiều dự án) là để tạo ra một kịch bản cấu hình.

Kịch bản cấu hình chạy các thử nghiệm khác nhau bao gồm biên dịch và chạy các chương trình nhỏ để xác định thuộc tính hệ thống và trình biên dịch. Kịch bản sau đó viết ra những phát hiện của nó như là một tập tin tiêu đề, hoặc một makefile, hoặc cả hai. Tất nhiên, bạn có thể làm bất cứ điều gì bạn thích.

Có một số công cụ để thực hiện công việc này bán tự động, nhưng chúng có thể quá mức cần thiết cho bạn. Nếu bạn muốn xem xét các tên là autoconftự động. Hãy coi chừng, chúng không đơn giản để tìm hiểu, nhưng chúng tạo ra các kịch bản lệnh cấu hình và các tệp makefiles nên hoạt động trên bất kỳ nền tảng nào miễn là nó có một vỏ kiểu unix và GNU tạo ra.

Các vấn đề liên quan