Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void print_bin(unsigned int val, int denominal)
- {
- int i = 0;
- unsigned int bit;
- char c;
- do {
- denominal >>= 1;
- i++;
- }
- while (denominal > 0);
- i -= 2;
- putchar('.');
- for (; i >= 0; i--) {
- bit = val & (1 << i);
- c = (bit == 0) ? '0' : '1';
- putchar(c);
- }
- putchar('\n');
- }
- int main(void) {
- unsigned int a_num = 1;
- unsigned int a_denom = 16;
- unsigned int b_num = 3;
- unsigned int b_denom = 16;
- unsigned int r_i;
- unsigned int i = 0;
- unsigned int result = 0;
- int a_b;
- unsigned int tmp = 0;
- unsigned exp;
- printf("%d/%d / %d/%d\n", a_num, a_denom,
- b_num, b_denom);
- do {
- a_b = a_denom - b_denom;
- if (a_b < 0) {
- a_num <<= 1;
- a_denom <<= 1;
- }
- else if (a_b > 0) {
- b_num <<= 1;
- b_denom <<= 1;
- }
- } while (a_b != 0);
- for (exp = 0, tmp = b_denom; exp < 32 && tmp > 0; exp++, tmp >>= 1) ;
- printf("%d/%d / %d/%d\n", a_num, a_denom,
- b_num, b_denom);
- printf("a_num=");
- print_bin(a_num, a_denom);
- printf("b_num=");
- print_bin(b_num, b_denom);
- r_i = a_num;
- r_i <<= 1;
- i = 1;
- while (i < b_denom) {
- i <<= 1;
- if (r_i < b_num) {
- r_i <<= 1;
- result <<= 1;
- } else if (r_i >= b_num) {
- r_i -= b_num;
- r_i <<= 1;
- result <<= 1;
- result += 1;
- }
- print_bin(result, i);
- }
- printf("r=");
- print_bin(r_i, b_denom);
- printf(" * 2^-%d", exp);
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement