This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
notes:discrete:fall2022:projects:lmr1 [2022/10/26 04:42] – [OUTPUT SPECIFICATIONS] hcordell | notes:discrete:fall2022:projects:lmr1 [2022/10/28 03:55] (current) – [OUTPUT SPECIFICATIONS] dmuck | ||
---|---|---|---|
Line 16: | Line 16: | ||
This week we will be focusing on creating functions that do basic algorithm operations. | This week we will be focusing on creating functions that do basic algorithm operations. | ||
=====SPECIFICATIONS===== | =====SPECIFICATIONS===== | ||
+ | Use your bitwise functions from lmr0. Bit arrays should be the output. | ||
+ | |||
*Our task is to ask questions on Discord or in class and document our findings on this wiki page collaboratively, | *Our task is to ask questions on Discord or in class and document our findings on this wiki page collaboratively, | ||
Line 21: | Line 23: | ||
*For anybody interested in editing the wiki page, here is the dokuwiki user guide: https:// | *For anybody interested in editing the wiki page, here is the dokuwiki user guide: https:// | ||
====OUTPUT SPECIFICATIONS==== | ====OUTPUT SPECIFICATIONS==== | ||
- | Determine a unified means of output so that all submissions have an identical format. Should get identical output to running non-bitwise versions of the same functions. | + | Determine a unified means of output so that all submissions have an identical format. Should get identical output to running non-bitwise versions of the same functions. |
+ | |||
+ | Example: your function subtraction of 27 and 3 should output 24 just like 27 - 3 = 24. | ||
+ | |||
+ | Make sure to be mindful of what numbers you are using in the tests. You should ideally pick numbers that could cause problems in your code, that way you can see if you are missing a case, or maybe a function is incorrect. Other than this, there is no output specification. Show your function does what it's supposed to do. | ||
=====PROGRAM===== | =====PROGRAM===== | ||
Two main ways to approach this project: the more laid out approach, and the straight to the point approach. You can either do the bitwise portion of each mathematical operator and convert it to the bit array, or, just work with the bit array from the start. If you work with the bit array from the start, you might find some functions easier, but some functions could also be harder. There really isn't a " | Two main ways to approach this project: the more laid out approach, and the straight to the point approach. You can either do the bitwise portion of each mathematical operator and convert it to the bit array, or, just work with the bit array from the start. If you work with the bit array from the start, you might find some functions easier, but some functions could also be harder. There really isn't a " | ||
- | =====EXAMPLES===== | ||
+ | When it comes to binary division and multiplication, | ||
+ | =====EXAMPLES===== | ||
+ | ====COOL BITWISE TRICKS==== | ||
+ | 1. Right-shift is equivalent to dividing by 2\\ | ||
+ | 2. Left-shift is equivalent to multiplying by 2\\ | ||
+ | 3. AND can be used on the first bit to check for odd/even\\ | ||
=====VERIFICATION===== | =====VERIFICATION===== | ||
+ | Make sure to test multiple different numbers, some numbers may work while others may not. | ||
Derive a set of tests that all submissions should perform to ascertain correctness (state the tests, the inputs, and the expected outputs). In conjunction with conforming output specifications, | Derive a set of tests that all submissions should perform to ascertain correctness (state the tests, the inputs, and the expected outputs). In conjunction with conforming output specifications, | ||
Line 33: | Line 45: | ||
=====PSEUDOCODE===== | =====PSEUDOCODE===== | ||
+ | |||
+ | =====C++ operator overloading===== | ||
+ | C++ operator overloading could be relevant to this project as a means of cleaning up your code. With operator overloading you could go from | ||
+ | < | ||
+ | multiply(a, b) | ||
+ | </ | ||
+ | To: | ||
+ | < | ||
+ | a * b | ||
+ | </ | ||
+ | If you're interested in doing this the basic syntax is as follows: | ||
+ | < | ||
+ | struct MyStruct | ||
+ | { | ||
+ | MyStruct operator*(MyStruct other_struct) { ... } | ||
+ | bool operator==(int x) { ... } | ||
+ | } | ||
+ | </ | ||
+ | Its just a function with some nice syntax! | ||