Microsoft DirectX 8.0 (Visual Basic) |
指数 2x の部分サポートを提供する。
expp vDest, vSrc0
次のコードは、expp 命令によって実行される処理とデスティネーションへの結果の書き込みを示している。
SetDestReg(); SetSrcReg(0); float w = m_Source[0].w; float v = (float)floor(m_Source[0].w); m_TmpReg.x = (float)pow(2, v); m_TmpReg.y = w - v; // 低精度指数 float tmp = (float)pow(2, w); DWORD tmpd = *(DWORD*)&tmp & 0xffffff00; m_TmpReg.z = *(float*)&tmpd; m_TmpReg.w = 1; WriteResult();
指数に負の数を指定した場合、expp 命令は不定の結果を生成する。
この命令は、2 を底とする指数の部分精度を計算する。vDest.z には近似解が生成されて、より正確な値は vDest.x*function(vDest.y) で求めることができる。function は、限られた範囲 (0.0 <= vDest.y < 1.0) の 2*vDest.y に対してユーザーが使用する近似である。
この命令ではスカラー ソースを使用し、vDest.z の評価には低精度計算が使用できる。ただし、近似エラーは、絶対エラー (10 ビット精度) の 1/(211) より小さく、0.0 <= t.y < 1.0 の範囲内になければならない。また、expp から返る w は 1.0 である。
次の例は、expp 命令の使い方を示している。
expp r5, r0