Если оба значения 12.3
и 14.7
являются числами с плавающей точкой, то в IEEE 754 значения 13.0
и 14.0
являются числами с плавающей точкой (в более общем смысле: если даны два нецелых числа с плавающей точкой, все целые числа между ними также являются числами с плавающей точкой). Следовательно, в соответствии с IEEE 754 floor
и ceil
всегда работают правильно (обратите внимание, что x86 использует представления IEEE 754).
Если вы не подпадаете под IEEE 754, учтите, что определение floor
гласит (C99: 7.12.9.2/3, у меня нет под рукой C90)
Функции пола возвращают наибольшее целочисленное значение, не превышающее x, выраженное в виде числа с плавающей запятой.
Я не знаю, как интерпретировать это, если наибольшее целочисленное значение, не превышающее x, не может быть точно представлено.