P: n/a

Hello all,
I have two integers and I want to divide one by another, and want to
get an integer result which is the higher side whenever the result is
a fraction.
3/2 =1 # Usual behavior
some_func(3, 2) =2 # Wanted
Any easier solution other than int(math.ceil(float(3)/2))

Suresh  
Share this Question
P: n/a
 jm*******@no.spam.gmail.com wrote:
Hello all,
I have two integers and I want to divide one by another, and want to
get an integer result which is the higher side whenever the result is
a fraction.
3/2 =1 # Usual behavior
some_func(3, 2) =2 # Wanted
Any easier solution other than int(math.ceil(float(3)/2))
The normal solution is to add (divisor1) to the dividend before division.
Ie ceil(3/2) = floor((3+(21))/2) = 2. Correct.
But ceil(4/2) = floor((4+(21))/2) = 2 also. Correct.
Hamish  
P: n/a

On Jun 7, 2:15 pm, Hamish Moffatt <ham...@cloud.net.auwrote:
jm.sur...@no.spam.gmail.com wrote:
Hello all,
I have two integers and I want to divide one by another, and want to
get an integer result which is the higher side whenever the result is
a fraction.
3/2 =1 # Usual behavior
some_func(3, 2) =2 # Wanted
Any easier solution other than int(math.ceil(float(3)/2))
The normal solution is to add (divisor1) to the dividend before division.
Ie ceil(3/2) = floor((3+(21))/2) = 2. Correct.
But ceil(4/2) = floor((4+(21))/2) = 2 also. Correct.
Hamish
What about this?
>>def div_ceil(a, b):
.... if a%b:
.... return ((a/b)+1)
.... else:
.... return (a/b)
....
>>div_ceil(3,2)
2
>>div_ceil(3,2)
1
>>3%2
1
>>(3%2)
1
>>div_ceil(5,2)
2
>>div_ceil(5,2)
3  
P: n/a
 jm*******@no.spam.gmail.com <jm*******@gmail.comwrote:
3/2 =1 # Usual behavior
some_func(3, 2) =2 # Wanted
def some_func(a, b):
return (a/b)
And people complain about Python's behaviour regarding division of
negative integers.

\S  si***@chiark.greenend.org.uk  http://www.chaos.org.uk/~sion/
"Frankly I have no feelings towards penguins one way or the other"
 Arthur C. Clarke
her nu becomež se bera eadward ofdun hlęddre heafdes bęce bump bump bump  
P: n/a
 jm*******@no.spam.gmail.com wrote:
On Jun 7, 2:15 pm, Hamish Moffatt <ham...@cloud.net.auwrote:
>jm.sur...@no.spam.gmail.com wrote:
>>Hello all, I have two integers and I want to divide one by another, and want to get an integer result which is the higher side whenever the result is a fraction. 3/2 =1 # Usual behavior some_func(3, 2) =2 # Wanted Any easier solution other than int(math.ceil(float(3)/2))
The normal solution is to add (divisor1) to the dividend before division.
Ie ceil(3/2) = floor((3+(21))/2) = 2. Correct. But ceil(4/2) = floor((4+(21))/2) = 2 also. Correct.
What about this?
>>>def div_ceil(a, b):
... if a%b:
... return ((a/b)+1)
... else:
... return (a/b)
Yes, although it's not as short or as fast (probably as my version):
def div_ceil(a, b):
return ((a+(b1))/b)
Hamish  
P: n/a

Hamish Moffatt <ha****@cloud.net.auwrote:
>jm*******@no.spam.gmail.com wrote:
>>>>def div_ceil(a, b):
... if a%b: ... return ((a/b)+1) ... else: ... return (a/b)
Yes, although it's not as short or as fast (probably as my version):
def div_ceil(a, b):
return ((a+(b1))/b)
If that's what you care about :
$ python mtimeit s 'def divc1(a,b): return (a+b1)/b' 'divc1(3,2)'
1000000 loops, best of 3: 0.443 usec per loop
$ python mtimeit s 'def divc2(a,b): return (a/b)' 'divc2(3,2)'
1000000 loops, best of 3: 0.331 usec per loop
Also, note:
>>divc2(sys.maxint, 2)
1073741824
>>divc1(sys.maxint, 2)
1073741824L
which is going to cause problems with sys.version_info < (2, 3) .
(Or do I mean (2, 2)? I don't have a 2.2 to hand.)

\S  si***@chiark.greenend.org.uk  http://www.chaos.org.uk/~sion/
"Frankly I have no feelings towards penguins one way or the other"
 Arthur C. Clarke
her nu becomež se bera eadward ofdun hlęddre heafdes bęce bump bump bump  
P: n/a

"Sion Arrowsmith" <si***@chiark.greenend.org.ukwrote in message
news:Y9*******@news.chiark.greenend.org.uk...
 jm*******@no.spam.gmail.com <jm*******@gmail.comwrote:
 3/2 =1 # Usual behavior
 some_func(3, 2) =2 # Wanted

 def some_func(a, b):
 return (a/b)

 And people complain about Python's behaviour regarding division of
 negative integers.
Nice. This goes on my 'why didn't I think of that' list;)
I was thinking of the rather pedestrian
d,r = divmod(a,b)
if r: d+=1
tjr  
P: n/a

On Jun 7, 8:30 pm, Some Other Guy <bga...@microsoft.comwrote:
jm.sur...@no.spam.gmail.com wrote:
Hello all,
I have two integers and I want to divide one by another, and want to
get an integer result which is the higher side whenever the result is
a fraction.
3/2 =1 # Usual behavior
some_func(3, 2) =2 # Wanted
Are you trying to accomplish int((a/b) + 0.5), but cheaply?
If so, consider that that is the same as (a/b) + (b/2b),
which is (2a/2b) + (b/2b), which is (2a+b)/2b.
Since this just involves doubling you can avoid multiplying altogether
and just use this:
def rounddiv(a,b):
return int((a+a+b)/(b+b))
That's 3 integer adds and 1 integer divide. The int() cast is just
there is case somebody passes in floats for a or b; if you know you're
only going to have integer arguments you don't need it.
The // operator was added to the language for a reason. I'm surprised
at how few Pythonistas are using it six years later.  
P: n/a

"Some Other Guy" <bg****@microsoft.comwrote in message
news:bb***************************@TEKSAVVY.COM...
 jm*******@no.spam.gmail.com wrote:

 Hello all,
 I have two integers and I want to divide one by another, and want to
 get an integer result which is the higher side whenever the result is
 a fraction.
 3/2 =1 # Usual behavior
 some_func(3, 2) =2 # Wanted

 Are you trying to accomplish int((a/b) + 0.5), but cheaply?
No, the OP wanted 'ceiling' division rather than 'floor' division.
In other words, always round up instead of down.
 If so, consider that that is the same as (a/b) + (b/2b),
 which is (2a/2b) + (b/2b), which is (2a+b)/2b.
This is nice for rounded division.
tjr  
P: n/a

In <11*********************@q69g2000hsb.googlegroups. com>, Dan Bishop
wrote:
On Jun 7, 8:30 pm, Some Other Guy <bga...@microsoft.comwrote:
>Since this just involves doubling you can avoid multiplying altogether and just use this:
def rounddiv(a,b): return int((a+a+b)/(b+b))
That's 3 integer adds and 1 integer divide. The int() cast is just there is case somebody passes in floats for a or b; if you know you're only going to have integer arguments you don't need it.
The // operator was added to the language for a reason. I'm surprised
at how few Pythonistas are using it six years later.
It would just document intent here because it still gives `float` results
if used with at least one `float` as operands:
In [1]: 10.0 // 2
Out[1]: 5.0
Ciao,
Marc 'BlackJack' Rintsch   This discussion thread is closed Replies have been disabled for this discussion.   Question stats  viewed: 6467
 replies: 9
 date asked: Jun 7 '07
