Microsoft DirectX 8.0 (C++) |
log2(x) の部分サポートを提供する。
logp 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