Другие языки программирования и технологии

язык СИ. НУЖНО ОКРУГЛИТЬ ЧИСЛО В БОЛЬШУЮ СТОРОНУ БЕЗ ФУНКЦИИ FLOOR ЗАРАНЕЕ СПАСИБО

#include <stdio.h>
#include <conio.h>

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;
}
Николай Лобанов
Николай Лобанов
74 409
Лучший ответ
В бОльшую по модулю или просто в бОльшую?
Положительное число можно округлить, например, так:
((int) x)+1, если дробная часть числа х не равна нулю. А если равна, то прибавлять единицу не нужно.
Игорь Петров
Игорь Петров
94 179
Стандартная функция ceil
СН
Саша Нилидин
50 873