不正确的矩阵4x4行列式计算

问题描述 投票:0回答:0

尝试用c++创建基础数学库进行学习,遇到了魔法问题...

用这段代码做行列式:

行列式A..D之前声明,

// matrix structure:
struct {
        n_type
        a, b, c, d, 
        e, f, g, h,
        i, j, k, l,
        m, n, o, p;
};

determinantA = a * (f*k*p - f*l*o - g*j*p +
                    g*l*n + h*j*o - h*k*n);
            
            // b
determinantB = b * (e*k*p - e*l*o - g*i*p +
                    g*l*m + h*i*o - h*k*m);
            
            // c
determinantC = c * (e*j*p - e*l*n - f*i*p +
                    f*l*m + h*i*n - h*j*m);
            
            // d
determinantD = d * (e*j*o - e*k*n - f*i*o +
                    f*k*m + g*i*n - g*j*m);
            
            return (determinantA - determinantB + determinantC - determinantD);

出于某种原因,此代码在某些情况下会产生准确的结果,而在另一些情况下会产生不正确的结果,例如此输入矩阵:mat4( 2, 9, -5, 1, 4, 6, 8, 3, 2, 8,2, 12, 7, 3, 8, 2) 给出不正确的结果 [4008] 与在线计算器结果 [-3468] 相比,它是代码中的错误,还是所有在线计算器(包括 wolfram)都存在错误(疑问)?

c++ math matrix vector linear-algebra
© www.soinside.com 2019 - 2024. All rights reserved.