#include
#include
float approximate_float_up(float); // округляет float до целого в большую сторону
double approximate_double_up(double); // округляет double до целого в большую сторону
float approximate_float_down(float); // округляет float до целого в меньшую сторону
double approximate_double_down(double); // округляет double до целого в меньшую сторону
float approximate_float_mantissa(float); // округляет float до целого в большую сторону если мантисса >= 0.5 и наоборот
double approximate_double_mantissa(double); // округляет double до целого в большую сторону если мантисса >= 0.5 и наоборот
int main() {
float x_float = 1.00000001f;
float y_float = 1.0000001f;
double x_double = 1.0000000000000001;
double y_double = 1.000000000000001;
printf("x-float = %.8f\n", approximate_float_up(x_float));
printf("y-float = %.8f\n", approximate_float_up(y_float));
printf("x-double = %.18Lf\n", approximate_double_up(x_double));
printf("y-double = %.18Lf\n\n", approximate_double_up(y_double));
printf("x-float = %.8f\n", approximate_float_down(1.99f));
printf("x-double = %.18Lf\n\n", approximate_double_down(1.99));
printf("x-float = %.8f\n", approximate_float_mantissa(1.499999f));
printf("y-float = %.8f\n", approximate_float_mantissa(1.5f));
printf("x-double = %.18Lf\n", approximate_double_mantissa(1.499999));
printf("y-double = %.18Lf\n", approximate_double_mantissa(1.5));
_getch();
return 0;
}
float approximate_float_up(float num) {
int temp = (int)num;
float rest = num - temp;
if (rest < 0) rest *= -1;
if (rest < 1e-7) num = (float)temp;
else num = (float)temp + 1;
return num;
}
double approximate_double_up(double num) {
int temp = (int)num;
double rest = num - temp;
if (rest < 0) rest *= -1;
if (rest < 1e-15) (double)num = temp;
else num = (double)temp + 1;
return num;
}
float approximate_float_down(float num) {
return (float)(int)num;
}
double approximate_double_down(double num) {
return (double)(int)num;
}
float approximate_float_mantissa(float num) {
int temp = (int)num;
float rest = (num - temp) * 10;
int val = (int)rest;
if (val >= 5) ++temp;
return (float)temp;
}
double approximate_double_mantissa(double num) {
int temp = (int)num;
double rest = (num - temp) * 10;
int val = (int)rest;
if (val >= 5) ++temp;
return (double)temp;
}
Стандартная функция ceil
В бОльшую по модулю или просто в бОльшую?
Положительное число можно округлить, например, так:
((int) x)+1, если дробная часть числа х не равна нулю. А если равна, то прибавлять единицу не нужно.