opt
authoryu.dongliang <maja_creater@qq.com>
Sun, 22 Nov 2020 11:50:56 +0000 (19:50 +0800)
committeryu.dongliang <maja_creater@qq.com>
Sun, 22 Nov 2020 11:50:56 +0000 (19:50 +0800)
mat.c

diff --git a/mat.c b/mat.c
index 65eb0f21220a4ea9cd76428c5ce8897b9bf1621f..c873b4d76cf2568760cb755ca62bb3528c3d4c8c 100644 (file)
--- a/mat.c
+++ b/mat.c
@@ -182,7 +182,6 @@ void mat_mul_strassen(mat_t* m, mat_t* m0, mat_t* m1, int n_min)
        mat_t* p1 = mat_alloc(0, 0, n, NULL);
        mat_t* p2 = mat_alloc(0, 0, n, NULL);
        mat_t* p3 = mat_alloc(0, 0, n, NULL);
-       mat_t* p4 = mat_alloc(0, 0, n, NULL);
 
        // tmp mat t0
        mat_t* t0 = mat_alloc(0, 0, n, NULL);
@@ -199,7 +198,12 @@ void mat_mul_strassen(mat_t* m, mat_t* m0, mat_t* m1, int n_min)
        // p3 = (c + d) * e
        mat_add(t0, c,  d);
        mat_mul_strassen(p3, t0, e, n_min);
+
+       mat_sub(u, p1,  p3);
+       mat_free(p1);
+
        // p4 = d * (g - e)
+       mat_t* p4 = mat_alloc(0, 0, n, NULL);
        mat_sub(t0, g,  e);
        mat_mul_strassen(p4, d,  t0, n_min);
        // t = p3 + p4
@@ -207,11 +211,9 @@ void mat_mul_strassen(mat_t* m, mat_t* m0, mat_t* m1, int n_min)
 
        mat_sub(r, p4,  p2);
        mat_free(p2);
+       mat_free(p3);
        mat_free(p4);
 
-       mat_sub(u, p1,  p3);
-       mat_free(p1);
-       mat_free(p3);
 
        // tmp mat t1
        mat_t* t1 = mat_alloc(0, 0, n, NULL);