472,975 Members | 1,788 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,975 software developers and data experts.

Integer division

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

Jun 7 '07 #1
9 7200
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 (divisor-1) to the dividend before division.

Ie ceil(3/2) = floor((3+(2-1))/2) = 2. Correct.

But ceil(4/2) = floor((4+(2-1))/2) = 2 also. Correct.

Hamish
Jun 7 '07 #2
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 (divisor-1) to the dividend before division.

Ie ceil(3/2) = floor((3+(2-1))/2) = 2. Correct.

But ceil(4/2) = floor((4+(2-1))/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

Jun 7 '07 #3
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
Jun 7 '07 #4
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 (divisor-1) to the dividend before division.

Ie ceil(3/2) = floor((3+(2-1))/2) = 2. Correct.
But ceil(4/2) = floor((4+(2-1))/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+(b-1))/b)

Hamish
Jun 7 '07 #5
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+(b-1))/b)
If that's what you care about:

$ python -mtimeit -s 'def divc1(a,b): return (a+b-1)/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
Jun 7 '07 #6

"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

Jun 7 '07 #7
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.

Jun 8 '07 #8

"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

Jun 8 '07 #9
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
Jun 8 '07 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: Sebastian Haase | last post by:
Hi, I'm interested in having more people in our lab using numarray/NumPy instead of MatLab. For that I have put together a couple useful modules and written many myself. But then I got reminded of...
19
by: Imbaud Pierre | last post by:
integer division and modulo gives different results in c and python, when negative numbers are involved. take gdb as a widely available c interpreter print -2 /3 0 for c, -1 for python. more...
24
by: Teis Draiby | last post by:
In .NET, can I be sure that the result of a division between two integers always is truncated rather that rounded to nearest? Example: 99 / 50 = 1 regards, Teis
3
by: Janice | last post by:
I got this question from my textbook and I cannot understand the theory. When a signed positive integer X divided by pow(2,k), the result is shifting k bits to right and putting w-k bits of 0 from...
10
by: Mike S | last post by:
Does anyone know the logic behind why in VB.NET the result of a floating-point division ('/') is -rounded- on being converted to an integer type, such as with statements like Dim x As Integer =...
8
by: Candace | last post by:
I am using the following code to pick off each digit of a number, from right to left. The number I am working with is 84357. So for the first iteration it should return the number 7 and for the...
9
by: PengYu.UT | last post by:
Hi, The usually integer division will round the result to the biggest integet smaller than the float version division.For example, 10/3 = 3. I'm wondering if there is any easy way to round it...
15
by: Alasdair | last post by:
I need to apply the ceiling function to arbitrary sized (long) integers. However, division automatically returns the type of its operands, so that, for example: math.ceil(7/4) returns 1. I can use...
5
by: bdsatish | last post by:
How does (a/b) work when both 'a' and 'b' are pure integers ? 4 -5 Why is it -5 ? I expect it to be -4 ? Because, in C/C++, 9/2 is 4 and so negative of it, (-9/2) is -4. What should I do...
14
by: Default User | last post by:
Hi, If I have three 64 bit integers and I want to do this operation on them: x*y/z Lets say that what we are multiplying by (y) is offset by what we are dividing by (z) so that the final...
2
by: DJRhino | last post by:
Was curious if anyone else was having this same issue or not.... I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...
0
by: Aliciasmith | last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
0
tracyyun
by: tracyyun | last post by:
Hello everyone, I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
2
by: giovanniandrean | last post by:
The energy model is structured as follows and uses excel sheets to give input data: 1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
4
NeoPa
by: NeoPa | last post by:
Hello everyone. I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report). I know it can be done by selecting :...
3
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
1
by: Teri B | last post by:
Hi, I have created a sub-form Roles. In my course form the user selects the roles assigned to the course. 0ne-to-many. One course many roles. Then I created a report based on the Course form and...
0
isladogs
by: isladogs | last post by:
The next online meeting of the Access Europe User Group will be on Wednesday 6 Dec 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, Mike...
4
by: GKJR | last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.