Skip to content

Instantly share code, notes, and snippets.

@mnemocron
Last active December 12, 2019 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mnemocron/e0cb8cbe106dc5426e42b99e7f97605f to your computer and use it in GitHub Desktop.
Save mnemocron/e0cb8cbe106dc5426e42b99e7f97605f to your computer and use it in GitHub Desktop.
it does work now
#include <stdio.h>
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
#define BYTE_TO_BINARY(byte) \
(byte & 0x80 ? '1' : '0'), \
(byte & 0x40 ? '1' : '0'), \
(byte & 0x20 ? '1' : '0'), \
(byte & 0x10 ? '1' : '0'), \
(byte & 0x08 ? '1' : '0'), \
(byte & 0x04 ? '1' : '0'), \
(byte & 0x02 ? '1' : '0'), \
(byte & 0x01 ? '1' : '0')
int main()
{
printf("Hello World\n");
int dividend = 63; // N
int divisor = 4; // D
int n = 6; // number of bits in dividend
int N = 63;
int D = 4;
int Q = N;
int P = N;
printf(" i\t| D\t| Q\t | P\n");
D = D << n;
//printf(" x\t| %d\t| %d\t| %d\n", D, Q, P);
printf(" x");
printf("\t| %d ", D); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(D&0xff));
printf("\t| %d ", Q); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(Q&0xff));
printf("\t| %d\t ", P); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(P&0xff));
printf("\n");
for(int i=(n-1); i >= 0; i--){
P = 2*P - D;
//printf(" %d\t| %d\t| %d\t| %d\n", i, D, Q, P);
printf(" %d", i);
printf("\t| %d ", D); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(D&0xff));
printf("\t| %d ", Q); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(Q&0xff));
printf("\t| %d\t ", P); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(P&0xff));
printf("\n");
if(P>=0){
Q |= (1 << i);
} else {
Q &= ~(1 << i);
P = P + D;
}
//printf(" %d\t| %d\t| %d\t| %d\n", i, D, Q, P);
printf(" %d", i);
printf("\t| %d ", D); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(D&0xff));
printf("\t| %d ", Q); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(Q&0xff));
printf("\t| %d\t ", P); printf(BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(P&0xff));
printf("\n");
}
D = D >> n;
int R = N - Q*D;
printf("%d / %d = %d, R:%d\n", N, D, Q, R);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment