for checking overflow you can check the value after and before the
multiplication......if value after multiplication is less then there is
overflow for sure

now code will look like this :


int pow(int b, int e)
{
   int result = (e & 1) ? b:1;
   int prev;
   while( e > 1 )
   {
       prev=b;
       b = (b * b);
       if(b<prev)
              return -1;                 //OVERFLOW
       e >>= 1;
       if( e & 1 )
       {
          prev=result;
           result = (result * b);
           if(prev<result)
                    return -1;              //OVERFLOW
       }
   return result;
}
--


Amol Sharma
Third Year Student
Computer Science and Engineering
MNNIT Allahabad
 <http://gplus.to/amolsharma99>
<http://twitter.com/amolsharma99><http://in.linkedin.com/pub/amol-sharma/21/79b/507><http://www.simplyamol.blogspot.com/>






On Thu, May 31, 2012 at 12:07 PM, Ashish Goel <ashg...@gmail.com> wrote:

> the return type is int, hence when xpowern becomes bigger than INT_MAX, it
> should throw an exception.
>
>
> Best Regards
> Ashish Goel
> "Think positive and find fuel in failure"
> +919985813081
> +919966006652
>
>
> On Thu, May 31, 2012 at 11:59 AM, Amol Sharma <amolsharm...@gmail.com>wrote:
>
>> i didn't got your problem where is the overflow.. ??
>>
>> btw i will do the same like this :
>>
>> int pow(int b, int e)
>> {
>>    int result = (e & 1) ? b:1;
>>    while( e > 1 )
>>    {
>>        b = ((long long int)b * b);
>>        e >>= 1;
>>        if( e & 1 )
>>            result = ((long long int)result * b);
>>    }
>>    return result;
>> }
>> --
>>
>>
>> Amol Sharma
>> Third Year Student
>> Computer Science and Engineering
>> MNNIT Allahabad
>>  <http://gplus.to/amolsharma99> 
>> <http://twitter.com/amolsharma99><http://in.linkedin.com/pub/amol-sharma/21/79b/507><http://www.simplyamol.blogspot.com/>
>>
>>
>>
>>
>>
>>
>> On Thu, May 31, 2012 at 9:54 AM, Ashish Goel <ashg...@gmail.com> wrote:
>>
>>>  This algo is log(n) algo for finding power. However, this also has a
>>> problem of overflow. How do we control this.
>>>
>>> int power(int x, int n) {
>>>   int expo =1;
>>>   int even=x;
>>>   while (n>0)
>>>   {
>>>      while (n & 0x1==0) {
>>>         n>>=1; /*divide by 2*/
>>>         even*=even;
>>>      }
>>>      expo = expo*even;
>>>      n>>=1; /*n will be odd here always*/
>>>   }
>>>   return expo;
>>> }
>>>
>>> this is utilizing the fact that n is a binary number and can be written
>>> as x*xE when odd or xE otherwise.
>>>
>>> Best Regards
>>>
>>> Ashish Goel
>>> "Think positive and find fuel in failure"
>>> +919985813081
>>> +919966006652
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Algorithm Geeks" group.
>>> To post to this group, send email to algogeeks@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> algogeeks+unsubscr...@googlegroups.com.
>>> For more options, visit this group at
>>> http://groups.google.com/group/algogeeks?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to