Альтернатива ceil () и floor () для получения ближайших целочисленных значений выше и ниже значения с плавающей запятой?

Я ищу альтернативу функциям ceil() и floor() в C, поскольку мне не разрешено использовать их в проекте.

То, что я построил до сих пор, представляет собой сложный путь вперед и назад с использованием оператора приведения и с этим преобразованием из значения с плавающей запятой (в моем случае double) в int и позже, поскольку мне нужны ближайшие целые числа, выше и ниже заданного значения с плавающей запятой, чтобы быть также double значениями, обратно к double:

#include <stdio.h> int main(void) { double original = 124.576; double floorint; double ceilint; int f; int c; f = (int)original; //Truncation to closest floor integer value c = f + 1; floorint = (double)f; ceilint = (double)c; printf(«Original Value: %lf, Floor Int: %lf , Ceil Int: %lf», original, floorint, ceilint); }

Вывод:

Original Value: 124.576000, Floor Int: 124.000000 , Ceil Int: 125.000000

Для этого примера обычно мне не нужно, чтобы целочисленные значения ceil и floor c и f преобразовывались обратно в double, но они мне нужны в double в моей реальной программе. Считайте это требованием для задачи.

Хотя результат дает желаемые значения и пока кажется правильным, я все еще сомневаюсь, действительно ли этот метод настолько верен и уместен, или, говоря более ясно, если этот метод действительно вызывает какое-либо плохое поведение или проблему в программе или дает мне потерю производительности по сравнению с другими альтернативами, если есть другие возможные альтернативы.

Вы знаете лучшую альтернативу? И если да, то почему этот должен быть лучше?

Большое Вам спасибо.

_mm_round_sd если серьезно   —  person RobertS supports Monica Cellio    schedule 13.12.2019

@Sopel Что мне делать с _mm_round_sd?   —  person RobertS supports Monica Cellio    schedule 13.12.2019

@ RobertS-ReinstateMonica а что, если ввод 124 !!!!   —  person RobertS supports Monica Cellio    schedule 13.12.2019

@ManthanTilva Ну, я думаю, вы правы, я должен предоставить условие, что значение ceil должно быть только + 1 от значения пола, если исходное значение является истинным значением с плавающей запятой. В противном случае значение потолка должно быть эквивалентно значению пола. Для значения пола в этом случае не должно быть существенной разницы.   —  person RobertS supports Monica Cellio    schedule 13.12.2019

@ RobertS-ReinstateMonica: Совершенно верно. Вот что делает выражение 0.0 + i + (f != i) в моем ответе.   —  person RobertS supports Monica Cellio    schedule 13.12.2019

Источник: ledsshop.ru

Стиль жизни - Здоровье!