Advertisement
Guest User

Untitled

a guest
Nov 30th, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. void print_bin(unsigned int val, int denominal)
  6. {
  7. int i = 0;
  8. unsigned int bit;
  9. char c;
  10.  
  11. do {
  12. denominal >>= 1;
  13. i++;
  14. }
  15. while (denominal > 0);
  16.  
  17. i -= 2;
  18. putchar('.');
  19.  
  20. for (; i >= 0; i--) {
  21. bit = val & (1 << i);
  22. c = (bit == 0) ? '0' : '1';
  23. putchar(c);
  24. }
  25. putchar('\n');
  26. }
  27.  
  28. int main(void) {
  29.  
  30. unsigned int a_num = 1;
  31. unsigned int a_denom = 16;
  32. unsigned int b_num = 3;
  33. unsigned int b_denom = 16;
  34. unsigned int r_i;
  35. unsigned int i = 0;
  36. unsigned int result = 0;
  37. int a_b;
  38. unsigned int tmp = 0;
  39. unsigned exp;
  40.  
  41.  
  42. printf("%d/%d / %d/%d\n", a_num, a_denom,
  43. b_num, b_denom);
  44.  
  45. do {
  46. a_b = a_denom - b_denom;
  47. if (a_b < 0) {
  48. a_num <<= 1;
  49. a_denom <<= 1;
  50. }
  51. else if (a_b > 0) {
  52. b_num <<= 1;
  53. b_denom <<= 1;
  54. }
  55. } while (a_b != 0);
  56.  
  57. for (exp = 0, tmp = b_denom; exp < 32 && tmp > 0; exp++, tmp >>= 1) ;
  58.  
  59.  
  60. printf("%d/%d / %d/%d\n", a_num, a_denom,
  61. b_num, b_denom);
  62. printf("a_num=");
  63. print_bin(a_num, a_denom);
  64. printf("b_num=");
  65. print_bin(b_num, b_denom);
  66.  
  67.  
  68. r_i = a_num;
  69. r_i <<= 1;
  70.  
  71. i = 1;
  72. while (i < b_denom) {
  73. i <<= 1;
  74. if (r_i < b_num) {
  75. r_i <<= 1;
  76. result <<= 1;
  77. } else if (r_i >= b_num) {
  78. r_i -= b_num;
  79. r_i <<= 1;
  80. result <<= 1;
  81. result += 1;
  82. }
  83. print_bin(result, i);
  84. }
  85. printf("r=");
  86. print_bin(r_i, b_denom);
  87. printf(" * 2^-%d", exp);
  88.  
  89. return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement