Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Компьютерная графика » Дзен » Точность.


Точность.

Сообщений 1 страница 3 из 3

1

Всем привет. Мне необходимо получить минимальное float число, такое, чтобы прибавив его к другому, это другое гарантированно увеличилось. Если просто прибавить константу, то из-за потери точности, нет гарантии увеличения числа. Как быть? В принципе есть мысль извлечь мантиссу и прибавить к ней единицу, но может есть какой способ получше? И не совсем понятно как извлечь мантиссу, не прибегая к ассемблеру.

Отредактировано Booster (2008-11-20 17:34:35)

0

2

А зачем ассемблер - тупо кладем в память, берем с этого адреса как unsigned int - *(insigned int *) &floatValue
и побитовыми операциями извлекаем мантиссу - нужно просто посмотреть спеки - если я не ошибаюсь младшие 24 бита это она и есть

0

3

Спасибо, младшие 23 бита на мантиссу, 8 бит на порядок, и 1 на знак.

Я сделал так:

Код:
void IncMantissa(float *pNumber)
{
   unsigned int *piNumber = (unsigned int*)(pNumber);
   int mantissa = (*piNumber) & 0x7fffff;
   mantissa++;
   (*piNumber) &= 0xff800000;
   (*piNumber) += mantissa;
}

Вроде работает. Мне посоветовали такое:

Код:
float nextFloat(float f)
{
   int i_flt = *(int*)&f + 1;
   return *(float*)&i_flt;
}

Интересно насколько это корректно?

Но по-идее должен быть и более классический вариант.
Что-то вроде умножения FLT_EPSILON на какое-то число.

Отредактировано Booster (2008-11-21 17:42:08)

0


Вы здесь » Компьютерная графика » Дзен » Точность.


создать форум