floor or ceil for integer division



 DEVELOP > c-Plus-Plus > floor or ceil for integer division

LINK TO THIS PAGE  


rating :  0   |  0


  Page 1 of 1

1

 
Topic: DEVELOP > c-Plus-Plus
User: ""
Date: 22 Oct 2006 09:44:31 PM
Object: floor or ceil for integer division
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 to 4 for this case?
Thanks,
Peng
.

User: "Jim Langston"

Title: Re: floor or ceil for integer division 22 Oct 2006 11:22:22 PM
<PengYu.UT@gmail.com> wrote in message
news:1161571471.624352.174150@i3g2000cwc.googlegroups.com...

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 to 4 for this case?

Thanks,
Peng

If you don't want to go with the converstion to float, then look at the
remainder.
int Operator = 10;
int Devisor = 3;
int Result = Operator / Devisor;
if ( Operator % Devisor != 0 )
Result++;
This will round up.
if ( Operator % Devisor >= Devisor / 2 )
Result++;
This will round to the closest in cases where the devisor is devisible by 2.
Neither of these handle negatives correctly.
.

User: "Steve Pope"

Title: Re: floor or ceil for integer division 22 Oct 2006 09:53:40 PM
<
> wrote:

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 to 4 for this case?

int a,b,c;
c = (int) ((double)(a/b) + 0.4999999);
See also rint(), nearbyint() in <cmath>.
Steve
.
User: ""

Title: Re: floor or ceil for integer division 22 Oct 2006 10:10:08 PM
On Oct 22, 9:53 pm,
(Steve Pope) wrote:

PengYu...@gmail.com <PengYu...@gmail.com> wrote:

The usually integer division willroundthe 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 toroundit to 4 for this case?int a,b,c;

c = (int) ((double)(a/b) + 0.4999999);

Will this introduce errors if a/b=0.50000000000001?


See also rint(), nearbyint() in <cmath>.

How can I guarantee the conversion between float and int won't
introduce any errors?
Thanks,
Peng
.
User: "Steve Pope"

Title: Re: floor or ceil for integer division 22 Oct 2006 11:09:53 PM
<
> wrote:

On Oct 22, 9:53 pm,

(Steve Pope) wrote:

PengYu...@gmail.com <PengYu...@gmail.com> wrote:

The usually integer division willroundthe 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 toroundit to 4 for this

case?int a,b,c;

c = (int) ((double)(a/b) + 0.4999999);

Will this introduce errors if a/b=0.50000000000001?

Well, you only asked that 10/3 round up to 4.

See also rint(), nearbyint() in <cmath>.

How can I guarantee the conversion between float and int won't
introduce any errors?

These give you either the nearest value, or they round down.
If you need more exact behavior use something like rint(),
and refer to the man pages for it.
Steve
.

User: "Ye Dafeng"

Title: Re: floor or ceil for integer division 22 Oct 2006 10:23:55 PM
wrote:


On Oct 22, 9:53 pm,

(Steve Pope) wrote:

PengYu...@gmail.com <PengYu...@gmail.com> wrote:

The usually integer division willroundthe 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 toroundit to 4 for this case?int a,b,c;

c = (int) ((double)(a/b) + 0.4999999);

Will this introduce errors if a/b=0.50000000000001?

See also rint(), nearbyint() in <cmath>.

How can I guarantee the conversion between float and int won't
introduce any errors?

Thanks,
Peng

how about this method:
if((a%b) != 0)
c = (int)(a/b) + 1;
.

User: "Salt_Peter"

Title: Re: floor or ceil for integer division 23 Oct 2006 12:40:02 AM
wrote:

On Oct 22, 9:53 pm,

(Steve Pope) wrote:

PengYu...@gmail.com <PengYu...@gmail.com> wrote:

The usually integer division willroundthe 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 toroundit to 4 for this case?int a,b,c;

c = (int) ((double)(a/b) + 0.4999999);

Will this introduce errors if a/b=0.50000000000001?


See also rint(), nearbyint() in <cmath>.

How can I guarantee the conversion between float and int won't
introduce any errors?

Thanks,
Peng

Your worried about an insignificant, tiny, non-measureable error whilst
you are attempting to introduce a significant error by suggesting that
10/3 should be 4? Thats a 20% error! What happens when a 20% error gets
propagated?
What are the requirements for that 3 to become a 4? and why?
have you looked at modulus? 10%3, which will result 1 as an adjustment?
Although i still can't understand why.
Do you realize that you'ld have to multiply that doubles's error as
displayed by 1.0 x 10^14 in order for it to impact a cast to an integer
value? In fact, since an integer has both a max and min limitation with
a relatively puny and microscopic valid range, that floating number has
an amazing, mind-boggling count of significant figures.
Here, observe what happens to an integer when it reaches its max
allowed value:
#include <iostream>
#include <limits>
int main()
{
int min = std::numeric_limits<int>::min();
int max = std::numeric_limits<int>::max();
std::cout << "range of an integer on this platform:";
std::cout << "\nmin: " << min;
std::cout << "\nmax: " << max;
std::cout << "\nrollover = " << ++max; // rollover
std::cout << std::endl;
return 0;
}
/* your mileage will vary... i'm running a 64 bit platform
range of an integer on this platform:
min: -2147483648
max: 2147483647
rollover = -2147483648 !!!
*/
Now observe the unadulterated double:
/*
range of a double on this platform:
min: 2.22507e-308
max: 1.79769e+308
*/
thats around 4e616 !!! care to compare a roundoff error of 1.0e-14 to
that range?
floating numbers are not whole numbers and they do typically roundof
the last digit by 0.5 or so. But lets take that into context here.
.



User: "Andrey Tarasevich"

Title: Re: floor or ceil for integer division 23 Oct 2006 01:47:17 AM
wrote:

...
The usually integer division will round the result to the biggest
integet smaller than the float version division.For example, 10/3 = 3.

That's true for positive integers. If one of them is negative though,
the direction of rounding will normally be the opposite (i.e. integer
division normally rounds towards zero).

I'm wondering if there is any easy way to round it to 4 for this case?

Increase the dividend by 'divisor - 1' before performing the division:
(10 + 3 - 1) / 3 = 4
--
Best regards,
Andrey Tarasevich
.

User: "Ye Dafeng"

Title: Re: floor or ceil for integer division 22 Oct 2006 09:56:34 PM
wrote:

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 to 4 for this case?

Thanks,
Peng

I donot understand what you want to say, 10/3=3.33333, so the integer
you need is 3, is that wrong?
.
User: "Ye Dafeng"

Title: Re: floor or ceil for integer division 22 Oct 2006 09:59:07 PM
Ye Dafeng wrote:

PengYu.UT@gmail.com wrote:

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 to 4 for this case?

Thanks,
Peng


I donot understand what you want to say, 10/3=3.33333, so the integer
you need is 3, is that wrong?

hoops, i misunderstand your meaning, sorry!
.



  Page 1 of 1

1

 


Related Articles
 

NEWER

pg.1232     pg.940     pg.716     pg.544     pg.412     pg.311     pg.234     pg.175     pg.130     pg.96     pg.70     pg.50     pg.35     pg.24     pg.16     pg.10     pg.6     pg.3     pg.1

OLDER