fork download
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <limits.h>
  5. #include <inttypes.h>
  6.  
  7. uint32_t multiply (uint16_t a, uint16_t b)
  8. {
  9. return ((a & ( (int16_t)( ( b & (1 << 0) ) << 15 ) ) / ( 1 << 15) ) << 0 ) +
  10. ((a & ( (int16_t)( ( b & (1 << 1) ) << 14 ) ) / ( 1 << 15) ) << 1 ) +
  11. ((a & ( (int16_t)( ( b & (1 << 2) ) << 13 ) ) / ( 1 << 15) ) << 2 ) +
  12. ((a & ( (int16_t)( ( b & (1 << 3) ) << 12 ) ) / ( 1 << 15) ) << 3 ) +
  13. ((a & ( (int16_t)( ( b & (1 << 4) ) << 11 ) ) / ( 1 << 15) ) << 4 ) +
  14. ((a & ( (int16_t)( ( b & (1 << 5) ) << 10 ) ) / ( 1 << 15) ) << 5 ) +
  15. ((a & ( (int16_t)( ( b & (1 << 6) ) << 9 ) ) / ( 1 << 15) ) << 6 ) +
  16. ((a & ( (int16_t)( ( b & (1 << 7) ) << 8 ) ) / ( 1 << 15) ) << 7 ) +
  17. ((a & ( (int16_t)( ( b & (1 << 8) ) << 7 ) ) / ( 1 << 15) ) << 8 ) +
  18. ((a & ( (int16_t)( ( b & (1 << 9) ) << 6 ) ) / ( 1 << 15) ) << 9 ) +
  19. ((a & ( (int16_t)( ( b & (1 <<10) ) << 5 ) ) / ( 1 << 15) ) << 10) +
  20. ((a & ( (int16_t)( ( b & (1 <<11) ) << 4 ) ) / ( 1 << 15) ) << 11) +
  21. ((a & ( (int16_t)( ( b & (1 <<12) ) << 3 ) ) / ( 1 << 15) ) << 12) +
  22. ((a & ( (int16_t)( ( b & (1 <<13) ) << 2 ) ) / ( 1 << 15) ) << 13) +
  23. ((a & ( (int16_t)( ( b & (1 <<14) ) << 1 ) ) / ( 1 << 15) ) << 14) +
  24. ((a & ( (int16_t)( ( b & (1 <<15) ) << 0 ) ) / ( 1 << 15) ) << 15);
  25. }
  26.  
  27. int main(void)
  28. {
  29.  
  30. uint16_t a, b;
  31. a = 0;
  32. b = 0;
  33.  
  34. do
  35. {
  36. if (multiply(a, b) != a * b)
  37.  
  38.  
  39. fprintf(stderr,
  40. "ERROR:\n"
  41. "my: %u\n"
  42. "norm: %u\n"
  43. "%hu * %hu\n"
  44. "\n",
  45. multiply(a, b), (a * b),a, b
  46. );
  47.  
  48. if (UINT16_MAX == a)
  49. {
  50. b++;
  51. }
  52. a++;
  53. //fprintf(stderr, "%hu * %hu\n", a, b);
  54. } while ( ( a != 0 ) || (b != 0) );
  55.  
  56. fprintf(stderr, "%"PRIu16"* ""%"PRIu16"\n", a, b);
  57. printf("Done!\n");
  58.  
  59. return 0;
  60. }
  61.  
Time limit exceeded #stdin #stdout 5s 1784KB
stdin
Standard input is empty
stdout
Standard output is empty