Microsoft DirectX 8.0 (C++)

logp

log2(x) の部分サポートを提供する。

logp   vDest, vSrc0

レジスタ

vDest
処理の結果を保持するデスティネーション レジスタ。
vSrc0
入力引数を指定するソース レジスタ。

処理

次のコードは、logp 命令によって実行される処理とデスティネーションへの結果の書き込みを示している。

    SetDestReg();
    SetSrcReg(0);

    float v = ABSF(m_Source[0].w);
    if (v != 0)
    {
        m_TmpReg.x = m_TmpReg.y = m_TmpReg.z = m_TmpReg.w = 
            (float)(log(v)/log(2));  
    }
    else
    {
        m_TmpReg.x = m_TmpReg.y = m_TmpReg.z = m_TmpReg.w = MINUS_INFINITY();
    }

    WriteResult();

注意

この命令は、2 を底とする対数の部分精度を計算する。vDest.z には近似解が生成されて、より正確な値は vDest.x + function(vDest.y) で求めることができる。function は、限られた範囲 (1.0 <= vDest.y < 2.0) の log2(vDest.y) に対してユーザーが使用する近似である。

logp 命令では、符号ビットは無視されるスカラー ソースを使用し、vDest.z の評価には低精度計算が使用できる。近似エラーは、絶対エラー (10 ビット精度) の 1/(211) より小さく、1.0 <= t.y < 2.0 の範囲内になければならない。ソース引数が 0 の場合は、結果のベクトル (-infinity, 0.0, -infinity, 1.0) が生成される。

次の例は、logp 命令の使い方を示している。

logp r0,r1