⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zgemm.c

📁 InsightToolkit-1.4.0(有大量的优化算法程序)
💻 C
📖 第 1 页 / 共 2 页
字号:
                }
                for (l = 0; l < *k; ++l) {
                    i__1 = l + j * *ldb;
                    if (b[i__1].r != 0. || b[i__1].i != 0.) {
                        temp.r = alpha->r * b[i__1].r - alpha->i * b[i__1].i,
                        temp.i = alpha->r * b[i__1].i + alpha->i * b[i__1].r;
                        for (i = 0; i < *m; ++i) {
                            i__1 = i + j * *ldc;
                            i__2 = i + l * *lda;
                            c[i__1].r += temp.r * a[i__2].r - temp.i * a[i__2].i,
                            c[i__1].i += temp.r * a[i__2].i + temp.i * a[i__2].r;
                        }
                    }
                }
            }
        } else if (conja) {

/*           Form  C := alpha*conjg( A' )*B + beta*C. */

            for (j = 0; j < *n; ++j) {
                for (i = 0; i < *m; ++i) {
                    temp.r = 0., temp.i = 0.;
                    for (l = 0; l < *k; ++l) {
                        i__1 = l + i * *lda;
                        i__2 = l + j * *ldb;
                        temp.r += a[i__1].r * b[i__2].r + a[i__1].i * b[i__2].i,
                        temp.i += a[i__1].r * b[i__2].i - a[i__1].i * b[i__2].r;
                    }
                    if (beta->r == 0. && beta->i == 0.) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
                    } else {
                        i__1 = i + j * *ldc;
                        z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
                    }
                }
            }
        } else {

/*           Form  C := alpha*A'*B + beta*C */

            for (j = 0; j < *n; ++j) {
                for (i = 0; i < *m; ++i) {
                    temp.r = 0., temp.i = 0.;
                    for (l = 0; l < *k; ++l) {
                        i__1 = l + i * *lda;
                        i__2 = l + j * *ldb;
                        temp.r += a[i__1].r * b[i__2].r - a[i__1].i * b[i__2].i,
                        temp.i += a[i__1].r * b[i__2].i + a[i__1].i * b[i__2].r;
                    }
                    if (beta->r == 0. && beta->i == 0.) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
                    } else {
                        i__1 = i + j * *ldc;
                        z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
                    }
                }
            }
        }
    } else if (nota) {
        if (conjb) {

/*           Form  C := alpha*A*conjg( B' ) + beta*C. */

            for (j = 0; j < *n; ++j) {
                if (beta->r == 0. && beta->i == 0.) {
                    for (i = 0; i < *m; ++i) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = 0., c[i__1].i = 0.;
                    }
                } else if (beta->r != 1. || beta->i != 0.) {
                    for (i = 0; i < *m; ++i) {
                        i__1 = i + j * *ldc;
                        z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r, c[i__1].i = z__1.i;
                    }
                }
                for (l = 0; l < *k; ++l) {
                    i__1 = j + l * *ldb;
                    if (b[i__1].r != 0. || b[i__1].i != 0.) {
                        i__1 = j + l * *ldb;
                        temp.r = alpha->r * b[i__1].r + alpha->i * b[i__1].i,
                        temp.i = alpha->i * b[i__1].r - alpha->r * b[i__1].i;
                        for (i = 0; i < *m; ++i) {
                            i__1 = i + j * *ldc;
                            i__2 = i + l * *lda;
                            c[i__1].r += temp.r * a[i__2].r - temp.i * a[i__2].i,
                            c[i__1].i += temp.r * a[i__2].i + temp.i * a[i__2].r;
                        }
                    }
                }
            }
        } else {

/*           Form  C := alpha*A*B'          + beta*C */

            for (j = 0; j < *n; ++j) {
                if (beta->r == 0. && beta->i == 0.) {
                    for (i = 0; i < *m; ++i) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = 0., c[i__1].i = 0.;
                    }
                } else if (beta->r != 1. || beta->i != 0.) {
                    for (i = 0; i < *m; ++i) {
                        i__1 = i + j * *ldc;
                        z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r, c[i__1].i = z__1.i;
                    }
                }
                for (l = 0; l < *k; ++l) {
                    i__1 = j + l * *ldb;
                    if (b[i__1].r != 0. || b[i__1].i != 0.) {
                        i__1 = j + l * *ldb;
                        temp.r = alpha->r * b[i__1].r - alpha->i * b[i__1].i,
                        temp.i = alpha->r * b[i__1].i + alpha->i * b[i__1].r;
                        for (i = 0; i < *m; ++i) {
                            i__1 = i + j * *ldc;
                            i__2 = i + l * *lda;
                            c[i__1].r += temp.r * a[i__2].r - temp.i * a[i__2].i,
                            c[i__1].i += temp.r * a[i__2].i + temp.i * a[i__2].r;
                        }
                    }
                }
            }
        }
    } else if (conja) {
        if (conjb) {

/*           Form  C := alpha*conjg( A' )*conjg( B' ) + beta*C. */

            for (j = 0; j < *n; ++j) {
                for (i = 0; i < *m; ++i) {
                    temp.r = 0., temp.i = 0.;
                    for (l = 0; l < *k; ++l) {
                        i__1 = l + i * *lda;
                        i__2 = j + l * *ldb;
                        temp.r +=   a[i__1].r * b[i__2].r - a[i__1].i * b[i__2].i,
                        temp.i += - a[i__1].r * b[i__2].i - a[i__1].i * b[i__2].r;
                    }
                    if (beta->r == 0. && beta->i == 0.) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
                    } else {
                        i__1 = i + j * *ldc;
                        z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
                    }
                }
            }
        } else {

/*           Form  C := alpha*conjg( A' )*B' + beta*C */

            for (j = 0; j < *n; ++j) {
                for (i = 0; i < *m; ++i) {
                    temp.r = 0., temp.i = 0.;
                    for (l = 0; l < *k; ++l) {
                        i__1 = l + i * *lda;
                        i__2 = j + l * *ldb;
                        temp.r += a[i__1].r * b[i__2].r + a[i__1].i * b[i__2].i,
                        temp.i += a[i__1].r * b[i__2].i - a[i__1].i * b[i__2].r;
                    }
                    if (beta->r == 0. && beta->i == 0.) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
                    } else {
                        i__1 = i + j * *ldc;
                        z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
                    }
                }
            }
        }
    } else {
        if (conjb) {

/*           Form  C := alpha*A'*conjg( B' ) + beta*C */

            for (j = 0; j < *n; ++j) {
                for (i = 0; i < *m; ++i) {
                    temp.r = 0., temp.i = 0.;
                    for (l = 0; l < *k; ++l) {
                        i__1 = l + i * *lda;
                        i__2 = j + l * *ldb;
                        temp.r += a[i__1].r * b[i__2].r + a[i__1].i * b[i__2].i,
                        temp.i += a[i__1].i * b[i__2].r - a[i__1].r * b[i__2].i;
                    }
                    if (beta->r == 0. && beta->i == 0.) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
                    } else {
                        i__1 = i + j * *ldc;
                        z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
                    }
                }
            }
        } else {

/*           Form  C := alpha*A'*B' + beta*C */

            for (j = 0; j < *n; ++j) {
                for (i = 0; i < *m; ++i) {
                    temp.r = 0., temp.i = 0.;
                    for (l = 0; l < *k; ++l) {
                        i__1 = l + i * *lda;
                        i__2 = j + l * *ldb;
                        temp.r += a[i__1].r * b[i__2].r - a[i__1].i * b[i__2].i,
                        temp.i += a[i__1].r * b[i__2].i + a[i__1].i * b[i__2].r;
                    }
                    if (beta->r == 0. && beta->i == 0.) {
                        i__1 = i + j * *ldc;
                        c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
                        c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
                    } else {
                        i__1 = i + j * *ldc;
                        z__1.r = alpha->r * temp.r - alpha->i * temp.i,
                        z__1.i = alpha->r * temp.i + alpha->i * temp.r;
                        z__1.r += beta->r * c[i__1].r - beta->i * c[i__1].i,
                        z__1.i += beta->r * c[i__1].i + beta->i * c[i__1].r;
                        c[i__1].r = z__1.r, c[i__1].i = z__1.i;
                    }
                }
            }
        }
    }
} /* zgemm_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -