Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- uint16_t num;
- uint16_t divisor;
- uint64_t result;
- //...
- uint16_t divide16(uint16_t dividend, uint16_t divisor)
- {
- //uint16_t k = 65536.0 / (float)divisor;
- uint16_t k = 4294967295 / (divisor * 65535) + 1;
- return (dividend * k) >> 15 + 1;
- }
- int main()
- {
- uint16_t nums[] = {1234, 2345, 3456, 4567, 5678, 6789, 7777, 2253,12345,12346,12347,12312};
- uint16_t divisors[] = {3, 4, 5, 6, 7, 13, 15, 16, 17, 18,19,20,21,22,23,24,123,125,178,199};
- uint16_t fail = 0;
- for (uint8_t n = 0; n < sizeof(nums) / sizeof(nums[0]) - 1; n++) {
- for (uint8_t d = 0; d < sizeof(divisors) / sizeof(divisors[0]) - 1; d++) {
- uint16_t res1 = nums[n] / divisors[d];
- uint16_t res2 = divide16(nums[n], divisors[d]);
- printf("%d / %d = %d, divide16(%d, %d) = %d)", nums[n], divisors[d], res1, nums[n], divisors[d], res1);
- if (res1 == res2) {
- printf("-----OK\n");
- } else {
- printf("-----FAILED!\n");
- fail++;
- }
- }
- }
- if (fail > 0) {
- printf("----------\nTEST FAILED!!!\n");
- } else {
- printf("----------\nTEST SUCCESS!!!\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement