FPTAN - 部分正切

操作碼

指令

時鐘週期

說明

D9 F2

FPTAN

17-173

將 ST(0) 替換成自己的正切,並將 1 壓入 FPU 堆疊。

說明

計算暫存器 ST(0) 中源運算元的正切,結果儲存到暫存器 ST(0),並將 1.0 壓入 FPU 暫存器堆疊。源運算元必須以弧度的形式給出,並且必須小於 +263。下表顯示計算各類數值的部分正切時得到的無掩碼結果(假設未發生下溢)。

ST(0) SRC

ST(0) DEST

-

*

-F

-F 到 +F

-0

-0

+0

+0

+F

-F 到 +F

+

*

NaN

NaN

備註:F 表示有限實數。

* 表示浮點算術運算元無效 (#IA) 異常。

如果源運算元超出可接受範圍,則設定 FPU 狀態字中的 C2 標誌,暫存器 ST(0) 中的值保持不變。此指令不會在源運算元超出範圍時觸發異常。檢查 C2 標誌是否超出範圍由程式負責。對於超出 -263 到 +263 範圍的源運算元值,可以通過減去適當的 2 的整數倍,或使用以 2 為除數的 FPREM 指令,將它們減少到指令的可接受範圍內。如需有關使用適當的 值執行這類減法的討論,請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷第 7 章中標題為 "Pi" 的部分。

爲了同英特爾(R) 8087 及 Intel287 數學協處理器保持相容,計算出正切之後,值 1.0 會被壓入暫存器堆疊。此操作也簡化了其它三角函式的計算。例如,餘切(正切的倒數)可以通過先後執行 FPTAN 指令與 FDIVR 指令進行計算。

操作

IF ST(0) < 263
THEN
C2 0;
ST(0) tan(ST(0));
TOP TOP - 1;
ST(0) 1.0;
ELSE (*source operand is out-of-range *)
C2 1;
FI;

影響的 FPU 標誌

C1 - 如果發生堆疊下溢,則設定為 0;如果發生堆疊上溢,則設定為 1。如果產生不精確的結果異常 (#P),則表示取整方向:0 非向上取整;1 向上取整。

C2 - 如果源運算元超出範圍 -263 到 +263,則設定為 1;否則清除為 0。

C0、C3 - 未定義。

浮點異常

#IS - 發生堆疊下溢。

#IA - 源運算元是 SNaN 值、 或是不支援的格式。

#D - 源運算元是非規格化值。

#U - 結果對於目標格式而言太小。

#P - 值無法按目標格式精確表示。

保護模式異常

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。

實地址模式異常

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。

虛 8086 模式異常

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。