我正在將一個windows程序移植到linux的過程中,並且難以忍受一段特定於msvc的代碼,這些代碼似乎在檢查浮點運算,不精確的結果。我非常不確定如何以可靠的方式實現它。我應該補充一點,在涉及特定於linux的編程和像這些非常低級的操作時,我相當缺乏經驗。在Linux上檢測非正常浮動操作對於x86
具體來說,這給了我麻煩的部分是:
if (_statusfp() & (_SW_INEXACT | _SW_DENORMAL))
{
... portable stuff ...
}
_clearfp();
雖然fenv.h似乎給這兩個清除狀態標誌,檢查不準確標誌的能力,它似乎並沒有在檢查反常標誌方面提供任何幫助。此外,我已經向我建議,gcc可能會處理浮點運算的方式不同,以至於無法實現這段代碼的簡單直接端口。我會很感激這方面的任何幫助。
如果它是相關的,這是用於在性能問題的程序非常繁重的部分嘎吱嘎吱的部分。
編輯:當根據http://en.cppreference.com/w/cpp/numeric/fenv/FE_exceptions生成一個反常規結果時,fenv.h中稱爲FE_UNDERFLOW的標誌似乎會出現,但是有幾個其他來源聲明只有當結果太小時纔會產生,即使是低於正常值。將運行測試,看看它是否也能滿足我的需求,如果有的話也回答自己。
這有幫助嗎? http://stackoverflow.com/questions/16849009/in-the-linux-is-or-not-exists-some-functions-be-similar-to-clearfp-and-stat – doctorlove