// Binary array multiplication using Kronrod's (4 russians) // algorithm based on matrix rows partitioned into unsigned chars // BPW, 6/15/07 // This code runs significantly faster if compiled with -O1 (at least). #include #include #include #include #define SEED (666) // Converts column bit subscript to subscript for unsigned char #define SUB2CHAR(sub) ((sub)/8) // Determines bit position within unsigned char for column bit subscript #define SUB2BIT(sub) ((sub)%8) // Gets 0/1 value for a column bit subscript #define GETBIT(arr,row,col) ((arr[row][SUB2CHAR(col)]>>SUB2BIT(col))&1) // Sets bit to 1 #define SETBIT(arr,row,col) \ (arr[row][SUB2CHAR(col)]=arr[row][SUB2CHAR(col)]|(1<>k) & 1) // Examine row i, bit # t*j+k for (p=0; p