私は非常に奇妙な問題を抱えています。これが私のコードです:
<declare E,JV>
<perform some actions with E>
JV.Math_Mul(E);
////
public new void Math_Mul(Matrix a)
{
double[,] vC = new double[a.ColCount, this.RowCount];
externExtensions.MatMul(vC,a.Values ,this.Values, a.RowCount, this.ColCount, a.ColCount);
Values = vC;
CopyB(B.Values,vC);
}
static unsafe void CopyB(double[,] B, double[,] val)
{
int Col = val.GetLength(1);
int j = 0;
fixed (double* pA = B, pB = val)
{
for (int i = 0; i < val.Length; i++)
{
if (i != j * Col)
pA[i-j] = pB[i];
else
j++;
}
}
}
CopyB 関数を実行した後、E に何かが起こり (これは CopyB のパラメーターではないため非常に奇妙です)、VS 2012 は次のように通知します: この命令ポインターで使用できないため、ローカルまたは引数 'E' の値を取得できません。最適化されています。コードの最適化がオフになっていて、このコードは CopyB を作成するまではうまく機能していました。それで、問題は何ですか?E はどうなりますか? どうすればよいですか?
PS CopyB は、乗算後の行列の解析を高速化するために実装されています。これは私の数学ツールの一部であり、ブロック行列を使用しています。
どんな助けにもとても感謝します!