Если f1
и f2
являются числами с плавающей запятой, а f1 <= f2
, и (int)f1
и (int)f2
являются действительными преобразованиями, то (int)f1 <= (int)f2
.
Другими словами, усечение доцелочисленный тип никогда меняет раунд заказа.
Вы можете заменить float2ui
просто (int)arg0
, проверив, что float
находится в границах int
.
Обратите внимание, что поведение float
до int
и float
до unsigned
равно undefined , если усеченное значение float
выходит за пределыдиапазон для типа.
Ваш текущий код, каким-то образом интерпретирующий память float
как память int
, имеет поведение undefined .Даже ввод символов через union
даст вам определенные результаты реализации;обратите внимание, в частности, что sizeof(int)
не обязательно совпадает с sizeof(float)
.
Если , вы используете IEEE754 с одинарной точностью float
, 32-битное дополнение 2 int
без представления ловушек, с положительным значением для преобразования, последовательным порядком байтов и некоторыми допусками для различных шаблонов, представленных NaN
и +-Inf
, преобразование, выполняемое типом каламбура , сохраняет порядка.