aboutsummaryrefslogtreecommitdiff
path: root/sem3/algo/mm3
diff options
context:
space:
mode:
Diffstat (limited to 'sem3/algo/mm3')
-rw-r--r--sem3/algo/mm3/multiply.c67
1 files changed, 33 insertions, 34 deletions
diff --git a/sem3/algo/mm3/multiply.c b/sem3/algo/mm3/multiply.c
index da8068c..d931000 100644
--- a/sem3/algo/mm3/multiply.c
+++ b/sem3/algo/mm3/multiply.c
@@ -5,54 +5,53 @@
uint64_t mult(uint64_t x, uint64_t y, unsigned int bits)
{
- /* Check if they expect more than 64 bits. */
- if ( bits > 64 ) {
- printf("Sorry we cant handle higher than 64 bits\n");
- exit(1);
- } else if (bits <= 1) {
- return x && y;
- }
+ /* Check if they expect more than 64 bits. */
+ if (bits > 64) {
+ printf("Sorry we cant handle higher than 64 bits\n");
+ exit(1);
+ } else if (bits <= 1) {
+ return x && y;
+ }
- unsigned int newBits = bits >> 1;
+ unsigned int newBits = bits >> 1;
#if DO_PRINT == 1
- printf("\n\n bits: %u, New bits: %u\n", bits, newBits);
-#endif
+ printf("\n\n bits: %u, New bits: %u\n", bits, newBits);
+#endif
- /* Split up into to */
- uint32_t halvMask = ((uint64_t)1 << newBits) - 1;
+ /* Split up into to */
+ uint32_t halvMask = ((uint64_t)1 << newBits) - 1;
#if DO_PRINT == 1
- printf("Using mask 0x%08X\n", halvMask);
-#endif
- uint32_t a = (x >> (newBits)) & halvMask;
- uint32_t b = x & halvMask;
- uint32_t c = (y >> (newBits)) & halvMask;
- uint32_t d = y & halvMask;
+ printf("Using mask 0x%08X\n", halvMask);
+#endif
+ uint32_t a = (x >> (newBits)) & halvMask;
+ uint32_t b = x & halvMask;
+ uint32_t c = (y >> (newBits)) & halvMask;
+ uint32_t d = y & halvMask;
#if DO_PRINT == 1
- printf("A: 0x%08X, B: 0x%08X, C: 0x%08X, D: 0x%08X\n", a, b, c, d);
-#endif
-
- return (mult(a, c, newBits) << bits) + ((mult(a, d, newBits) + mult(b, c, newBits)) << newBits) + mult(b, d, newBits);
+ printf("A: 0x%08X, B: 0x%08X, C: 0x%08X, D: 0x%08X\n", a, b, c, d);
+#endif
+ return (mult(a, c, newBits) << bits) +
+ ((mult(a, d, newBits) + mult(b, c, newBits)) << newBits) +
+ mult(b, d, newBits);
}
-
int main(void)
{
+ uint32_t a = 0xFFFFFF;
+ uint8_t b = 55;
+ uint64_t res;
- uint32_t a = 0xFFFFFF;
- uint8_t b = 55;
- uint64_t res;
+ clock_t begin = clock();
+ res = mult(a, b, 64);
+ clock_t end = clock();
- clock_t begin = clock();
- res = mult(a, b, 64);
- clock_t end = clock();
+ printf("Result: %lld\n", res);
- printf("Result: %lld\n", res);
+ clock_t diff = end - begin;
+ printf("Took %d which is %f s\n", diff, (double)diff / CLOCKS_PER_SEC);
- clock_t diff = end - begin;
- printf("Took %d which is %f s\n", diff, (double)diff/CLOCKS_PER_SEC);
-
- return 0;
+ return 0;
}