#ifndef _ReDo_H_
#define _ReDo_H_
#define REDO_1(ACT) do{ ACT; }while(0)
#define REDO_2(ACT) do{ REDO_1(ACT);REDO_1(ACT); }while(0)
#define REDO_3(ACT) do{ REDO_2(ACT);REDO_1(ACT); }while(0)
#define REDO_4(ACT) do{ REDO_3(ACT);REDO_1(ACT); }while(0)
#define REDO_5(ACT) do{ REDO_4(ACT);REDO_1(ACT); }while(0)
#define REDO_6(ACT) do{ REDO_5(ACT);REDO_1(ACT); }while(0)
#define REDO_7(ACT) do{ REDO_6(ACT);REDO_1(ACT); }while(0)
#define REDO_8(ACT) do{ REDO_7(ACT);REDO_1(ACT); }while(0)
#define REDO_9(ACT) do{ REDO_8(ACT);REDO_1(ACT); }while(0)
#define REDO_10(ACT) do{ REDO_9(ACT);REDO_1(ACT); }while(0)
#define REDO_11(ACT) do{ REDO_10(ACT);REDO_1(ACT); }while(0)
#define REDO_12(ACT) do{ REDO_11(ACT);REDO_1(ACT); }while(0)
#define REDO_13(ACT) do{ REDO_12(ACT);REDO_1(ACT); }while(0)
#define REDO_14(ACT) do{ REDO_13(ACT);REDO_1(ACT); }while(0)
#define REDO_15(ACT) do{ REDO_14(ACT);REDO_1(ACT); }while(0)
#define REDO_16(ACT) do{ REDO_15(ACT);REDO_1(ACT); }while(0)
#define REDO_N(ACT,N) REDO_##N(ACT)
#define redo_fun(ACT,N) do{int loopn = (N); \
while(loopn>=8) \
{ \
loopn-=8; \
REDO_8(ACT); \
} \
switch(loopn) \
{ \
case 7:REDO_7(ACT);break; \
case 6:REDO_6(ACT);break; \
case 5:REDO_5(ACT);break; \
case 4:REDO_4(ACT);break; \
case 3:REDO_3(ACT);break; \
case 2:REDO_2(ACT);break; \
case 1:REDO_1(ACT);break; \
} \
}while(0)
#endif
void Matrix_add(double *a ,double *b ,double *c ,int lenth)
{
redo_fun( *a++ = *b++ + *c++; , lenth );
}