Например
Вот делю я 12 на 13 и получаю 0.9235655246278, а нужно ровно 1
Или
23872 / 7 = 3410.2857142857, а нужно 3411
Ceil использовать нельзя. Как это сделать по другому?
C/C++
Как округлить число в с++ без использования библеотек?
#include <iostream>
using namespace std;
double fn(double num) {
auto x = static_cast<long long>(num);
if (fabs(num) - abs(x) > 1e-14) ++x;
return static_cast<double>(x);
}
int main() {
double a = 23872;
double b = 7;
auto ab = a / b;
ab = fn(ab);
cout << ab << '\n';
system("pause > nul");
}
using namespace std;
double fn(double num) {
auto x = static_cast<long long>(num);
if (fabs(num) - abs(x) > 1e-14) ++x;
return static_cast<double>(x);
}
int main() {
double a = 23872;
double b = 7;
auto ab = a / b;
ab = fn(ab);
cout << ab << '\n';
system("pause > nul");
}
можно трюк с целочисленным делением в таких случаях использовать
(12 + 13 - 1) / 13 = 2
(23872 + 7 - 1) / 7 = 3411
(не ручаюсь за отрицательные числа)
(12 + 13 - 1) / 13 = 2
(23872 + 7 - 1) / 7 = 3411
(не ручаюсь за отрицательные числа)
Ты серьёзно? Я же написал.
Преобразуешь к целому (int)number и добавляешь 1 если у числа есть дробная часть.
Преобразуешь к целому (int)number и добавляешь 1 если у числа есть дробная часть.
Дамир Кайдаров
Как определить, что есть дробная часть?
Александр Дытте
Все я уже все понял, спасибо:) задача решена
Нужно использовать деление с остатком. Перевести числа в целые (int). Оператор % вычисляет остаток от деления. Если остаток больше, чем половина делимого - значит, надо округлить вверх, то есть к результату деления прибавить 1.
Второй способ - тоже в целых числах. Предумножить делимое на 2, разделить на делитель. То есть, если при нормальном делении дробная часть будет больше или равна 0.5 - то с предумножением 0.5 превратится в 1. Потом проверить на чётность. Если младший бит 1 - значит число нечётное. Либо использовать остаток от деления на 2. Делим результат на 2, и если была нечётность - то прибавляем 1.
Поправка: это эмуляция round, а не ceil.
Ещё нужно обработать отрицательные числа и следить за переполнением.
Второй способ - тоже в целых числах. Предумножить делимое на 2, разделить на делитель. То есть, если при нормальном делении дробная часть будет больше или равна 0.5 - то с предумножением 0.5 превратится в 1. Потом проверить на чётность. Если младший бит 1 - значит число нечётное. Либо использовать остаток от деления на 2. Делим результат на 2, и если была нечётность - то прибавляем 1.
Поправка: это эмуляция round, а не ceil.
Ещё нужно обработать отрицательные числа и следить за переполнением.
Похожие вопросы
- Написать программу, которая сравнивает число перестановок элементов при использовании сортировки «пузырьком» (усовершенс
- Как написать функцию которая вычисляет арктангенс из любого числа на c++ без использования библиотек
- С++. БЕЗ ИСПОЛЬЗОВАНИЯ АДРЕСОВ И УКАЗАТЕЛЕЙ. Пусть дано натуральное число n и вещественная матрица размером n x 10.
- Помогите пожалуйста с Массивами .В языке С .Заполнил 2-мерный массив N и M случайными числами дальше не понимаю.
- Сколько раз нужно взять остаток от деления числа на кол-во единиц в его двоичном представлении, чтобы получить 0
- С++ Максимум трёх чисел Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число
- На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
- Добрый день. Нужна помощь в реализации динамических структур. Нужно написать дек с использованием malloc.
- Указатели. Программирование с использованием динамических двухмерным масивов.
- C++ библиотека fstream. при использовании Кириллицы изменяется кодировка в создаваемом файле..