#include <cmath>
#include <iostream>
#include <iomanip>
#include <limits.h>
int idiv_ceil ( int numerator, int denominator )
{
int truncated = numerator / denominator;
return truncated + (((numerator < 0) ^ (denominator > 0)) && (numerator - truncated*denominator));
}
void test( int n, int d )
{
int using_float = (int) std::ceil( (double)n / d );
int using_fn = idiv_ceil(n, d);
std::cout << std::setw(15) << n
<< std::setw( 5) << d
<< std::setw(15) << using_float
<< std::setw(15) << using_fn
<< std::setw( 8) << ((using_float == using_fn)? "ok" : "ERROR") << std::endl;
}
int main(void)
{
test(INT_MAX, 1);
test(-INT_MAX, 1);
test(INT_MIN, 1);
for( int n = -5; n < 5; n++ ) {
for ( int d = 1; d < 5; d++ ) {
test(n, d);
test(n, -d);
}
}
}
Standard input is empty
     2147483647    1     2147483647     2147483647      ok
    -2147483647    1    -2147483647    -2147483647      ok
    -2147483648    1    -2147483648    -2147483648      ok
             -5    1             -5             -5      ok
             -5   -1              5              5      ok
             -5    2             -2             -2      ok
             -5   -2              3              3      ok
             -5    3             -1             -1      ok
             -5   -3              2              2      ok
             -5    4             -1             -1      ok
             -5   -4              2              2      ok
             -4    1             -4             -4      ok
             -4   -1              4              4      ok
             -4    2             -2             -2      ok
             -4   -2              2              2      ok
             -4    3             -1             -1      ok
             -4   -3              2              2      ok
             -4    4             -1             -1      ok
             -4   -4              1              1      ok
             -3    1             -3             -3      ok
             -3   -1              3              3      ok
             -3    2             -1             -1      ok
             -3   -2              2              2      ok
             -3    3             -1             -1      ok
             -3   -3              1              1      ok
             -3    4              0              0      ok
             -3   -4              1              1      ok
             -2    1             -2             -2      ok
             -2   -1              2              2      ok
             -2    2             -1             -1      ok
             -2   -2              1              1      ok
             -2    3              0              0      ok
             -2   -3              1              1      ok
             -2    4              0              0      ok
             -2   -4              1              1      ok
             -1    1             -1             -1      ok
             -1   -1              1              1      ok
             -1    2              0              0      ok
             -1   -2              1              1      ok
             -1    3              0              0      ok
             -1   -3              1              1      ok
             -1    4              0              0      ok
             -1   -4              1              1      ok
              0    1              0              0      ok
              0   -1              0              0      ok
              0    2              0              0      ok
              0   -2              0              0      ok
              0    3              0              0      ok
              0   -3              0              0      ok
              0    4              0              0      ok
              0   -4              0              0      ok
              1    1              1              1      ok
              1   -1             -1             -1      ok
              1    2              1              1      ok
              1   -2              0              0      ok
              1    3              1              1      ok
              1   -3              0              0      ok
              1    4              1              1      ok
              1   -4              0              0      ok
              2    1              2              2      ok
              2   -1             -2             -2      ok
              2    2              1              1      ok
              2   -2             -1             -1      ok
              2    3              1              1      ok
              2   -3              0              0      ok
              2    4              1              1      ok
              2   -4              0              0      ok
              3    1              3              3      ok
              3   -1             -3             -3      ok
              3    2              2              2      ok
              3   -2             -1             -1      ok
              3    3              1              1      ok
              3   -3             -1             -1      ok
              3    4              1              1      ok
              3   -4              0              0      ok
              4    1              4              4      ok
              4   -1             -4             -4      ok
              4    2              2              2      ok
              4   -2             -2             -2      ok
              4    3              2              2      ok
              4   -3             -1             -1      ok
              4    4              1              1      ok
              4   -4             -1             -1      ok