Tôi đang trong quá trình chuyển một chương trình cửa sổ sang Linux và đã bị chặn trên đoạn mã cụ thể của msvc có vẻ như kiểm tra các hoạt động điểm nổi đã đưa ra một sự không bình thường hoặc kết quả không chính xác. Tôi rất không chắc chắn về cách thực hiện nó một cách mạnh mẽ. Tôi nên thêm rằng tôi khá thiếu kinh nghiệm khi nói đến cả hai lập trình cụ thể cho Linux và các hoạt động cấp thấp như thế này.Phát hiện các hoạt động nổi bất thường trên Linux cho x86
Cụ thể, phần đó mang lại cho tôi rắc rối như sau:
if (_statusfp() & (_SW_INEXACT | _SW_DENORMAL))
{
... portable stuff ...
}
_clearfp();
Trong khi fenv.h dường như cung cấp khả năng cả hai rõ ràng cờ tình trạng và kiểm tra các lá cờ không chính xác, nó không có vẻ cung cấp bất kỳ hỗ trợ nào trong việc kiểm tra cờ không chính xác. Hơn nữa, tôi đã có nó gợi ý với tôi rằng gcc có thể xử lý các hoạt động điểm nổi khác nhau đủ để một cổng thẳng đơn giản của đoạn mã này có thể không thực hiện được. Tôi rất biết ơn vì sự giúp đỡ nào trong việc này.
Nếu nó có liên quan, điều này được sử dụng trong một phần crunching số rất nặng của chương trình mà vấn đề hiệu suất.
Chỉnh sửa: Cờ trong fenv.h được gọi là FE_UNDERFLOW dường như được nâng lên khi kết quả không chính xác được tạo theo http://en.cppreference.com/w/cpp/numeric/fenv/FE_exceptions, nhưng đã thấy một số nguồn khác cho biết rằng nó chỉ được nâng lên khi kết quả quá nhỏ ngay cả đối với một subnormal . Sẽ chạy thử nghiệm để xem nếu nó làm những gì tôi cần nó quá và và trả lời bản thân mình nếu như vậy.
Điều này có hữu ích không? http://stackoverflow.com/questions/16849009/in-the-linux-is-or-not-exists-some-functions-be-similar-to-clearfp-and-stat – doctorlove