Вопросы

Альтернатива 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 в моей реальной программе. Считайте это требованием для задачи.


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

Читать:
Как сделать скриншот всего рабочего стола Windows С#

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

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

_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

Похожие записи

SWIFT: Как программно установить размер кадра представления коллекции, чтобы он был равен его родительскому виду?

admin

Преобразование стохастического градиентного спуска в мини-пакетный градиентный спуск

admin

Настройка заголовка авторизации — приложение Flask с использованием запросов Python и JWT

admin

Как заставить установщик приложений MSIX выводить правильные настройки во время каждой сборки / публикации?

admin

не удалось загрузить phonegap с github

admin

Обработка с отслеживанием состояния в Beam — используется ли состояние для всех оконных панелей?

admin