Microsoft DirectX 8.0 (Visual Basic)

expp

指数 2x の部分サポートを提供する。

expp   vDest, vSrc0

レジスタ

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