#include #include #include #define get_rand() ((float)random()/(float)0xffffffff) static char smask[] = {0x0,0x8,0x10,0x2,0x20,0x1,0x4,0x0}; unsigned int encode(unsigned int m) { return ((m<<5^m<<3)&0x20) | ((m<<4^m<<3)&0x10) | ((m<<2^m<<1)&0x8) | ((m<<2)&0x4) | (m&0x2) | ((m>>2)&0x1); } unsigned int correct(unsigned int r) { unsigned int s; s = ((r<<2^r^r>>3)&0x4) | ((r>>1^r^r>>3)&0x2) | ((r>>1^r^r>>3)&0x1); return (s!=7)?r^smask[s]:-1; } unsigned int decode(unsigned int r) { return (r>>2&1) | (r&2) | (r<<2&4); } void transmit(int* r,float e) { int i,m; for (i=0,m=0;i<6;i++) m |= ((get_rand()