# Csce 3110 – project 1

CSCE 3110 – Project 1

PROGRAM DESCRIPTION

In this programming assignment, you will (1) write a complete C++ program to

implement multiplication operations as directed and (2) perform an analysis with respect

to the theoretical and experimental running time complexity.

The following C++ code for the multiply function computes the product of two

operands using only addition:

int multiply(int operand1, int operand2)

{

int multiplier   = (operand1 < operand2) ? operand1 : operand2;

int multiplicand = (operand1 > operand2) ? operand1 : operand2;

int product = 0;

for (int i = 0; i < multiplier; i++)

{

product += multiplicand;

}

return product;

This function as given runs in �(���(��������, ��������)), which is a linear time

algorithm. We would, however, like for this algorithm to run faster, which can reduce the

time complexity to �(���(��� �������� , ��� �������� )) by using only addition, bit

shifting, and possibly the bitwise & operator. Therefore, your objective for this

programming assignment is to write a new function called bitMultiply, accepting the

same two parameters, to reduce the time complexity of this operation.

Some background on bit shifting: For some variable operand and number n, a bit shift

is written as either operand = operand << n; or operand = operand >> n;,

where the << operator left shifts the bits in operand by n bits and fills in the opened

positions with 0’s while the << operator right shifts the bits in operand by n bits,

throwing away the lower order n bits and replacing higher order bits with 0’s. The <<

operator corresponds to multiplying the number by 2

!

, while the >> operator

corresponds to dividing the number by 2

!

. For example, the decimal value 10 is

represented internally by the bit string 1010, so if we left shift 10 by 2 bits, we obtain

101000, which can be verified to be 10 × 2

!

. As another hint, C++ supports the bitwise

& operator that performs a bitwise “and” of two integers that can be helpful in inspecting

the bits of an integer.

To show this improvement in time complexity, we define the requirements for this

program:

• You will prompt for and read in two operands as positive integers (i.e., > 0). Since

we are using bit shifting, you will limit the resulting product to the maximum

positive value supported by integers, so that if the product exceeds this value you

will print an error message and terminate the program. If the user enters a nonpositive

value,

you

will

simply

continue

to

re-prompt

the

user

until

he/she

enters

a

CSCE 3110 – Project 1

Due: 11:59 PM on Wednesday, May 29, 2019

valid positive integer. You may assume that the user enters an integer, though

possibly out of range, for this assignment.

• For the multiplication operation provided by the multiply function, you will

perform this operation 10 times, calculating the amount of time in nanoseconds

that it takes to complete each time, and then find the average of all 10 of the

passes.

• You will then write a new function called bitMultiply, accepting the same two

operands as parameters, and compute the product of the two operands using

only bit shifting, addition, and perhaps use of the bitwise & operator. Similarly,

you will perform this operation 10 times, calculating the amount of time in

nanoseconds that it takes to complete each time, and then find the average of all

10 of the passes.

ANALYSIS REQUIREMENTS

Perform several runs of your program, ranging from product calculations using small

integers to product calculations using large integers (but not overflowing the integer

data structure). If your bitMultiply program was done correctly, you should see a

significant improvement in the amount of time needed to perform the calculations, but

did it improve by the expected amount? Include a screen shot (or typescript) of your

program performing several runs with various inputs and write a one or two paragraph

analysis of your results that describes whether or not you achieved the results you

expected. Plot your results on the same graph, where the size can be used for the xaxis

and

the

running

time

in

nanoseconds

can

be

used

for

the

y-axis.

Since

the

values

are

fairly large (i.e., in nanoseconds), you may wish to plot your results using the

logarithmic values as needed. Provide some explanation or justification on why your

results did or did not meet the expected performance metrics.

SAMPLE OUTPUT (input shown in bold):

\$ ./a.out

Enter first  positive integer: 3847849

Enter second positive integer: 9573535

Error: Product results in integer overflow.

\$ ./a.out

Enter first  positive integer: 134

Enter second positive integer: 8531

Multiplication using only ADDITION:

Product: 1143154

Pass  1: 0 seconds 25371 nanoseconds

Product: 1143154

Pass  2: 0 seconds 2528 nanoseconds

Product: 1143154

Pass  3: 0 seconds 2295 nanoseconds

Product: 1143154

Pass  4: 0 seconds 2428 nanoseconds

CSCE 3110 – Project 1

Due: 11:59 PM on Wednesday, May 29, 2019

Product: 1143154

Pass  5: 0 seconds 2219 nanoseconds

Product: 1143154

Pass  6: 0 seconds 2446 nanoseconds

Product: 1143154

Pass  7: 0 seconds 5348 nanoseconds

Product: 1143154

Pass  8: 0 seconds 2247 nanoseconds

Product: 1143154

Pass  9: 0 seconds 2227 nanoseconds

Product: 1143154

Pass 10: 0 seconds 2334 nanoseconds

Average: 0 seconds 4944.3 nanoseconds

Multiplication using only ADDITION and BIT SHIFTS:

Product: 1143154

Pass  1: 0 seconds 2384 nanoseconds

Product: 1143154

Pass  2: 0 seconds 1908 nanoseconds

Product: 1143154

Pass  3: 0 seconds 1992 nanoseconds

Product: 1143154

Pass  4: 0 seconds 2065 nanoseconds

Product: 1143154

Pass  5: 0 seconds 1848 nanoseconds

Product: 1143154

Pass  6: 0 seconds 1887 nanoseconds

Product: 1143154

Pass  7: 0 seconds 2278 nanoseconds

Product: 1143154

Pass  8: 0 seconds 2123 nanoseconds

Product: 1143154

Pass  9: 0 seconds 1866 nanoseconds

Product: 1143154

Pass 10: 0 seconds 1892 nanoseconds

Average: 0 seconds 2024.3 nanoseconds

\$ ./a.out

Enter first  positive integer: 0

Enter first  positive integer: 3834852

Enter second positive integer: -3481

Enter second positive integer: 348721

Multiplication using only ADDITION:

Product: 1558595236

Pass  1: 0 seconds 922810 nanoseconds

Product: 1558595236

Pass  2: 0 seconds 960872 nanoseconds

CSCE 3110 – Project 1

Due: 11:59 PM on Wednesday, May 29, 2019

Product: 1558595236

Pass  3: 0 seconds 967389 nanoseconds

Product: 1558595236

Pass  4: 0 seconds 975816 nanoseconds

Product: 1558595236

Pass  5: 0 seconds 916739 nanoseconds

Product: 1558595236

Pass  6: 0 seconds 939650 nanoseconds

Product: 1558595236

Pass  7: 0 seconds 942581 nanoseconds

Product: 1558595236

Pass  8: 0 seconds 974544 nanoseconds

Product: 1558595236

Pass  9: 0 seconds 947730 nanoseconds

Product: 1558595236

Pass 10: 0 seconds 903583 nanoseconds

Average: 0 seconds 945171 nanoseconds

Multiplication using only ADDITION and BIT SHIFTS:

Product: 1558595236

Pass  1: 0 seconds 4188 nanoseconds

Product: 1558595236

Pass  2: 0 seconds 3368 nanoseconds

Product: 1558595236

Pass  3: 0 seconds 6116 nanoseconds

Product: 1558595236

Pass  4: 0 seconds 3206 nanoseconds

Product: 1558595236

Pass  5: 0 seconds 3203 nanoseconds

Product: 1558595236

Pass  6: 0 seconds 4097 nanoseconds

Product: 1558595236

Pass  7: 0 seconds 4066 nanoseconds

Product: 1558595236

Pass  8: 0 seconds 3302 nanoseconds

Product: 1558595236

Pass  9: 0 seconds 5067 nanoseconds

Product: 1558595236

Pass 10: 0 seconds 5433 nanoseconds

Average: 0 seconds 4204.6 nanoseconds

REQUIREMENTS

• Your code should be well documented in terms of comments. For example, good

comments in general consist of a header (with your name, course section, date,

## Calculate the price of your order

Choose an academic level, add pages, and the paper type you want.
To reduce the cost of our essay writing services, select the lengthier deadline.
We can't believe we just said that to you.

550 words
We'll send you the first draft for approval by September 11, 2018 at 10:52 AM
Total price:
\$26
The price is based on these factors:
Academic level
Number of pages
Urgency
Basic features
• Free title page and bibliography
• Unlimited revisions
• Plagiarism-free guarantee
• Money-back guarantee
• 24/7 support
On-demand options
• Writer’s samples
• Part-by-part delivery
• Overnight delivery
• Copies of used sources
• Expert Proofreading
Paper format
• 275 words per page
• 12 pt Arial/Times New Roman
• Double line spacing
• Any citation style (APA, MLA, Chicago/Turabian, Harvard)

## Our guarantees

Delivering a high-quality product at a reasonable price is not enough anymore.
That’s why we have developed 5 beneficial guarantees that will make your experience with our service enjoyable, easy, and safe.

### Money-back guarantee

You have to be 100% sure of the quality of your product to give a money-back guarantee. This describes us perfectly. Make sure that this guarantee is totally transparent.

### Zero-plagiarism guarantee

Each paper is composed from scratch, according to your instructions. It is then checked by our plagiarism-detection software. There is no gap where plagiarism could squeeze in.

### Free-revision policy

Thanks to our free revisions, there is no way for you to be unsatisfied. We will work on your paper until you are completely happy with the result.

### Privacy policy

Your email is safe, as we store it according to international data protection rules. Your bank details are secure, as we use only reliable payment systems.

### Fair-cooperation guarantee

By sending us your money, you buy the service we provide. Check out our terms and conditions if you prefer business talks to be laid out in official language.

## Why is Purdue Papers the Most Helpful Essay Writing Service for You?

1. Custom-written and plagiarism-free papers: Our authors create their work from scratch. Before presenting them to clients, we routinely verify them for signs of plagiarism. Our quality assurance group also double-checks and fixes any grammatical errors, assuring that all of our authors adhere to the same standards of writing.
2. The significance of timely delivery cannot be overstated, and we consistently strive to meet or exceed our clients' deadlines. Regardless of the short time frame, you can count on our writers to get the job done. We always have a team of writers ready to go, even if the deadline is only six hours away.
3. Customer Satisfaction: Our customer service representatives are the best in the business and have a wealth of knowledge in dealing with clients. All our customer service representatives are trained to listen and reply promptly until you are satisfied with their service. To ensure you're happy, our expert writers will strictly follow the criteria to generate a special report. Our customer service may be contacted by chat, email, or phone. In addition, we provide round-the-clock assistance to all of our clients.
4. Confidentiality: Our systems are safe, and your information is always protected. We're constantly looking for new facts when it comes to finishing your work. We use a safe and secure payment channel. Since our ordering process is completely anonymous, you don't have to provide any credit card information to place a purchase with us.
5. Highly Trained Authors: Our writers have received extensive training and are committed to delivering only the best papers. They are fluent in APA, MLA, HARVARD, IEEE, CHICAGO, and AMA referencing styles. To meet your expectations, our skilled writers always pay close attention to your instructions.
6. Lowered prices: We have set prices that are already discounted. Our prices are the best and affordable for all our esteemed customers.

Let Professionals Take Care of your Academic Paper