Solved

# Powers of two

Posted on 2008-10-14
190 Views
hi,

number = log(input)/log(2);

could anyone pls help me...to get the power of two of the input, i am doing this but i got incorrect answer for 8 ...

0
Question by:zizi21
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 6
• 4

LVL 6

Expert Comment

ID: 22717021
Can't you use the math class pow function?

pow(number, power);
0

Author Comment

ID: 22717044
let say someone input 8,

i need to give the answer 3...
0

LVL 6

Expert Comment

ID: 22717063
ah so you do logs..

Unfortunately the problem is because the log function returns a double number, and double numbers can't be stored 100 percent accurately.

You will probably get some invalid result because of this.

0

LVL 6

Expert Comment

ID: 22717114
You actually could just just try using sprintf

like this:

double result = <log calculation>;

here is an example of only printing only 1 decimal
printf("%8.1d" result);  <-- creates a entire width of 8, and only 1 decimal space.

You can read up on this stuff.

here is a link I found:
http://cermics.enpc.fr/~ts/C/FUNCTIONS/format.html
0

LVL 6

Expert Comment

ID: 22717116
correction:

printf("%8.1d" result);
--> should be printf("%8.1d", result);
0

Author Comment

ID: 22717132
thanks...
0

Author Comment

ID: 22717136
it works with ceil..can i assume it is correct or do i need to check for floor ??
0

LVL 6

Accepted Solution

ID: 22717171
you can't assume.

There are a few problems. with the approach with using the ceil / floor.

1. What happens if you do a log / log and the actual answer should have a decimal...
Then when you use the ceil / floor to the nearest integer, you will obviously get the wrong answer.

I suggest that instead of using ceil/floor, you simply do the division, and only print out a certain precision of decimal places. You may want to add other tests, but I am unsure exactly how to approach with 1 single method that is the absolute best.

Usually, the programmer just rounds to a specific decimal place
0

Author Comment

ID: 22717208
thanks

0

LVL 53

Expert Comment

ID: 22718415
>> to get the power of two of the input,

If the input will be an integer value, this is relatively easy, since you have binary operators.
0

LVL 6

Expert Comment

ID: 22724260
I agree; I think I probably should have mentioned using bitwise operators, but I wasn't 100 percent clear on if he would be doing this approach only for powers of 2....

Have a look up on "Binary bitwise operators"

Operators: ">>" and "<<" are quite helpful
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn hoâ€¦
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to useâ€¦
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.
###### Suggested Courses
Course of the Month3 days, 19 hours left to enroll