shrtdctt.c

来自「2维fft程序」· C语言 代码 · 共 69 行

C
69
字号
/* test of shrtdct.c */#include <math.h>#include <stdio.h>#define MAX(x,y) ((x) > (y) ? (x) : (y))/* random number generator, 0 <= RND < 1 */#define RND(p) ((*(p) = (*(p) * 7141 + 54773) % 259200) * (1.0 / 259200))#define NMAX 16int main(){    void ddct8x8s(int isgn, double **a);    void ddct16x16s(int isgn, double **a);    void putdata2d(int n1, int n2, double **a);    double errorcheck2d(int n1, int n2, double scale, double **a);    double err;        int i;    double aarr[NMAX][NMAX], *a[NMAX], barr[NMAX][NMAX], *b[NMAX];    for (i = 0; i < NMAX; i++) a[i] = aarr[i];    for (i = 0; i < NMAX; i++) b[i] = barr[i];    /* check of 8x8 DCT */    putdata2d(8, 8, a);    ddct8x8s(-1, a);    ddct8x8s(1, a);    err = errorcheck2d(8, 8, 1.0, a);    printf("ddct8x8s   err= %g\n", err);    /* check of 16x16 DCT */    putdata2d(16, 16, a);    ddct16x16s(-1, a);    ddct16x16s(1, a);    err = errorcheck2d(16, 16, 1.0, a);    printf("ddct16x16s err= %g\n", err);    return 0;}void putdata2d(int n1, int n2, double **a){    int j1, j2, seed = 0;    for (j1 = 0; j1 <= n1 - 1; j1++) {        for (j2 = 0; j2 <= n2 - 1; j2++) {            a[j1][j2] = RND(&seed);        }    }}double errorcheck2d(int n1, int n2, double scale, double **a){    int j1, j2, seed = 0;    double err = 0, e;    for (j1 = 0; j1 <= n1 - 1; j1++) {        for (j2 = 0; j2 <= n2 - 1; j2++) {            e = RND(&seed) - a[j1][j2] * scale;            err = MAX(err, fabs(e));        }    }    return err;}

⌨️ 快捷键说明

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