#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;
}
Другие языки программирования и технологии
язык СИ. НУЖНО ОКРУГЛИТЬ ЧИСЛО В БОЛЬШУЮ СТОРОНУ БЕЗ ФУНКЦИИ FLOOR ЗАРАНЕЕ СПАСИБО
В бОльшую по модулю или просто в бОльшую?
Положительное число можно округлить, например, так:
((int) x)+1, если дробная часть числа х не равна нулю. А если равна, то прибавлять единицу не нужно.
Положительное число можно округлить, например, так:
((int) x)+1, если дробная часть числа х не равна нулю. А если равна, то прибавлять единицу не нужно.
Стандартная функция ceil
Похожие вопросы
- PASCAL - Мне необходимо округлить число в большую сторону
- Приведите пожалуйста пример программы на ассемблере, использующая API функцию GlobalMemoryStatus. Заранее спасибо.
- Программирование на языке СИ с использованием подпрограммы-функции
- «Помогите пожалуйста! Очень надо!! ! Нужно написать на языке Си (именно на СИ) . Заранее СПАСИБО!!!»
- Функции в языке СИ
- Язык си, двухмерный массив и функция.
- Задачка по нахождению суммы цифр числа на языке Си... Не могу разобраться с функциями Div и Fmod...
- Найти число Фибоначчи, ближайшее к заданному натуральному числу N. (программирование в языке Си)
- Функция в языке Си, которая если мы вводим числа до 100, пишет верно, если больше то неверно.
- как ввести и вывести числа? Язык Си