簡體   English   中英

如何定義x87浮點控制字的初始值?

[英]How is the initial value of x87 floating point control word defined?

可以使用_control87檢查x87浮點控制字的值。 當一個新線程啟動時,在我的平台上,它似乎從父線程繼承浮點控制字的值。

這是未定義的行為,還是我保證,如果我啟動一個新線程,並且線程庫沒有錯誤,控制字具有與父線程中相同的值?

在哪個標准中定義了這種行為,以及如何? 如果未在任何標准中定義,是在處理器手冊或操作系統文檔中定義的?

我正在使用C ++語言,在64位Windows 7上開發,編譯32位Windows目標,並使用x86兼容處理器執行代碼。 我需要專門針對這個平台的答案,但如果所有語言和處理器的行為相同,那么通用答案會更好。

C標准(ISO / IEC 9899:2011)在7.6第2段中有此聲明:

浮點環境具有線程存儲持續時間。 線程浮點環境的初始狀態是在創建時創建它的線程的浮點環境的當前狀態。

C ++標准(ISO / IEC 14882:2014)在26.3.1 [cfenv.syn]第3段中有此聲明:

浮點環境具有線程存儲持續時間(3.7.2)。 線程浮點環境的初始狀態是線程的浮點環境的狀態,該線程在構造對象時構造相應的std :: thread對象(30.3.1)。

也就是說,C和C ++都指定浮點環境是從創建線程繼承的。 此浮點環境是任何控件世界的語言級別表示。 但請注意,不支持支持浮點環境。 例如,C的腳注12(在5.1.2.3;突出顯示是我的)中暗示:

用於二進制浮點運算的IEC 60559標准需要某些用戶可訪問的狀態標志和控制模式。 浮點運算隱式設置狀態標志; 模式影響浮點運算的結果值。 支持這種浮點狀態的實現需要將其更改視為副作用 - 有關詳細信息,請參見附錄F.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM