Это очень простой вопрос, но важный, поскольку он сильно влияет на весь мой проект.Усечение двойного поплавка в C
Предположим, у меня есть следующий код: snipet
unsigned int x = 0xffffffff;
float f = (float)((double)x * (double)2.328306436538696e-010); // x/2^32
Я бы ожидать, что f
быть что-то вроде 0.99999, но вместо этого, она округляет до 1, так как это ближе float
приближение. Это не хорошо, так как мне нужны значения float
на интервале [0,1], а не [0,1]. Я уверен, что это что-то простое, но я буду благодарен за помощь.
Это не является полезным ответом. Как показали другие ответы (и они показали, как), есть вещи, которые вы можете сделать. –
@EricPostpischil, как это не полезно? Он обеспечивает рабочее решение проблемы, не выходя из режима округления, который изменит все промежуточные и последующие вычисления. –
Заявление «Не так много, что вы можете сделать» вводит в заблуждение и бесполезно обескураживает. Утверждение о битах в 'int' и' float' не имеет значения; ОП не ожидает точной карты. Они не просят избегать округления, просто чтобы контролировать это. –