Я ищу альтернативу функциям 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
