Проверьте стандартный заголовок <fenv.c>
, в частности, функцию fesetround()
и четыре макроса FE_DOWNWARD
, FE_TOWARDZERO
, FE_TONEAREST
и FE_UPWARD
. Это управляет тем, как значения с плавающей запятой округляются до целых. Убедитесь, что ваша реализация (т.е. библиотека компилятора C / C) действительно поддерживает это (проверив возвращаемое значение fesetround()
и документацию вашей реализации).
Функции, учитывающие эти настройки, включают (от <math.h>
):
llrint()
llrintf()
llrintl()
lrint()
lrintf()
lrintl()
rint()
rintf()
rintl()
llround()
llroundf()
llroundl()
lround()
lroundf()
lroundl()
nearbyint()
nearbyintf()
nearbyintl()
в зависимости от ваших потребностей (тип параметра и тип возвращаемого значения, с неточным исключением с плавающей запятой или без него).
NOTE : round()
, roundf()
и roundl()
do выглядят как будто они принадлежат в списке выше, но эти три делают не честь режим округления, установленный fesetround()
!!
Для получения более подробной информации обратитесь к своей самой любимой документации стандартной библиотеки.