資訊: 如何 Windows 處理浮點計算

文章翻譯 文章翻譯
文章編號: 102555 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

結論

所有 Microsoft Windows 平台都提供的 Win32 應用程式是常見的浮點環境,但在他們的裝置驅動程式的支援和他們的支援 Win16、 可攜式作業系統介面 (POSIX)、 MS-DOS,及 OS/2 為基礎的應用程式中,它們之間的差異。

本文將告訴您,如何在這些平台的每個提供浮點支援應用程式和裝置驅動程式。

其他相關資訊

本節首先說明浮點數的功能,在 Windows NT、 Windows 2000 和其後續任務,並說明 Windows 95、 Windows 98,Windows 98 第二版和 Windows 千禧版 (Me) 為主的系統中相同。每個群組的成員提供類似的浮點支援互相,但與兩個群組不同彼此由於的基礎架構的差異。

Windows NT 和其後續任務

Win32 應用程式

Win32 應用程式中的每個執行緒有它自己包含一般用途的暫存器和浮點暫存器的執行狀態。 因此,每一執行緒為基本來會控制浮點執行和例外處理。這在調整浮點處理器使用特殊四捨五入或精確度控制項和例外處理行為的處理序中允許個別的執行緒。

由 Win32 結構化例外處理 (SEH) 機制 Win32 核心內建處理浮點例外狀況。當執行緒造成浮點例外狀況時,SEH 機制會尋找登錄的執行緒來處理的例外狀況的例外處理常式。如果執行緒未處理的例外狀況,擁有它的程序就會關閉。

Windows NT 和其後續任務提供 Win32 應用程式並沒有內建浮點支援的 Intel x 86 處理器上甚至完整浮點支援。模擬是由 Win32 核心所提供,並沒有浮點硬體的電腦。因此,編譯器沒有提供它們自己的浮點模擬。

語言可能會有執行階段程式庫或提供預設的浮點例外狀況處理常式的執行階段系統。例如,Microsoft Visual C++ 執行階段程式庫提供預設的浮點例外狀況的處理,並包括功能,例如 _controlfp 判斷和調整浮點硬體四捨五入、 精確度控制項和例外狀況處理行為。

Win16 應用程式

Win16 應用程式通常被編譯為有包含浮點指示及 16 位元浮點模擬器,WIN87EM 的呼叫的修復記錄在物件程式碼中。如果電腦的處理器支援浮點指示,或一個副處理器是否存在,載入器會將修復解析為浮點數的指示,並指示將會執行。如果無法偵測浮點硬體則載入器會將修復解析為對 WIN87EM,呼叫,而且會執行模擬器。

WIN87EM 不會攔截浮點數,應用程式執行的指示 ; 它執行只有在明確地呼叫時。因此,請確定 Win16 應用程式編譯為支援會告訴連結器將修復記錄放在可執行檔的模擬。

在 RISC 電腦上的 Windows NT 使用 Windows NT Intel x 86 處理器模擬器程式碼來執行 Win16 應用程式。Windows NT 3.5 和 Windows NT 3.51 包括 80286 和 80287 模擬器 ; Windows NT 4.0 包括 i486 模擬器。Win16 應用程式一定會執行如同 Intel 浮點 coprocessors 都存在。因此,WIN87EM 不會在 RISC 電腦上提供浮點運算模擬。

裝置驅動程式

當 IRQL 小於或等於 DISPATCH_LEVEL,但是必須明確地保留處理器的浮點狀態,讓呼叫者的浮點內容不會變更時,Windows 2000 和其後續任務的核心模式驅動程式可以使用浮點數的指示。驅動程式函式必須呼叫 KeSaveFloatingPointState 之前任何浮點運算,並必須傳回給呼叫端之前呼叫 KeRestoreFloatingPointState。這些函式會記載在 Windows 2000 驅動程式開發套件 (DDK)。

Windows NT 3.51 和 Windows 4.0 核心模式驅動程式無法使用浮點數的指示,因為核心模式堆疊參數沒有保留浮點暫存器。如果核心模式驅動程式 不會 使用任何浮點指令,這可能會造成可能的使用者模式應用程式的數字的狀態損毀或系統失敗 (當機)。

MS-DOS 應用程式

Windows NT 和其後續任務上 Intel x 86 Intel x 86 處理器的虛擬 8086 模式執行 MS-DOS 應用程式。MS-DOS 應用程式可以存取浮點硬體,就像它們在 MS-DOS 中一樣。如果沒有任何浮點硬體存在,沒有模擬被提供給應用程式。因此,應用程式必須提供自己的模擬。

在 RISC 電腦上的 Windows NT 使用內建 Intel x 86 模擬程式碼。Windows NT 3.5 和 Windows NT 3.51 包括 80286 和 80287 模擬器 ; Windows NT 4.0 包括 i486 模擬器。如果如 Intel 浮點 coprocessors 都存在,永遠執行 MS-DOS 應用程式。

POSIX 應用程式

如 Win32 應用程式與 POSIX 應用程式可以假設該完整浮點支援永遠存在。

POSIX 標準並不會定義一種方式開啟浮點例外狀況。因此,使用浮點例外狀況的 POSIX 應用程式必須依賴特定系統功能。使用 Microsoft Visual C++ 編譯一個 POSIX 應用程式可以開啟浮動的例外狀況是利用 _controlfp 函式。浮點例外狀況可以再捕捉到由 SIGFPE,或如果應用程式需要執行不只是一項 fpieee_flt 函式所攔截之例外狀況。

OS/2 應用程式

浮點支援這個子系統中的符合的 OS/2: 如果不安裝浮動點硬體 OS/2 應用程式必須提供自己的模擬。OS/2 子系統只支援 Intel x 86 版本的 Windows NT 和其後續任務。

Windows 95、 Windows 98、 Windows 98 第二版及 Windows Me

Win32 應用程式

Windows 95 透過 Windows Me 的平台為 Windows NT 和 Windows 2000 平台可提供相同的浮點支援,Win32 應用程式。

Win16 應用程式

Win16 應用程式通常會編譯在它們包含浮點指示及 16 位元浮點模擬器,WIN87EM 的呼叫的物件程式碼中包含修復記錄。如果電腦的處理器支援浮點指示,或一個副處理器是否存在,載入器會將修復解析為浮點數的指示,並將會執行。如果無法偵測浮點硬體則載入器會將修復解析為對 WIN87EM,呼叫,而且會執行模擬器。

WIN87EM 不會攔截浮點數,應用程式執行的指示 ; 它執行只有在明確地呼叫時。因此,編譯 Win16 應用程式以支援將會告訴連結器將修復記錄放在可執行檔的模擬。

裝置驅動程式

虛擬裝置驅動程式 (VxD) 可以使用浮點數的指示,但必須儲存和還原狀態的浮點數的副處理器使用虛擬數學副處理器裝置介面。「 VxD 也必須註冊浮點例外狀況的例外狀況處理常式。

MS-DOS 應用程式

Windows 95 透過 Windows Me 的平台在 Intel x 86 處理器的虛擬 8086 模式下執行 MS-DOS 應用程式。MS-DOS 應用程式可以存取浮點硬體,就像它們在 MS-DOS 中一樣。如果沒有任何浮點硬體存在,沒有模擬被提供給應用程式。因此,應用程式必須提供自己的模擬,如 MS-DOS 應用程式的執行階段程式庫通常執行。

本文中討論的協力廠商產品是由與 Microsoft 無關的公司所製造。Microsoft 可讓不以暗示或其他方式,效能或可靠性這些產品的保證。

屬性

文章編號: 102555 - 上次校閱: 2014年3月1日 - 版次: 2.3
這篇文章中的資訊適用於:
  • Microsoft Win32 Application Programming Interface?應用於:
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
關鍵字:?
kbnosurvey kbarchive kbmt kbfloatpoint kbinfo kbkernbase kbprogramming KB102555 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:102555
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com