Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как представить число в виде трех float чисел.


Страницы:   1 2

@!!ex ©   (2009-07-06 10:24:00) 

Есть некоторое число N в пределах от 0 до 8388608.
Есть три float f1,f2,f3 разрядность у них 8 бит.

Нужно как-то сохранить число N в этих трех числах.

Вроде простая задча только у меня не получается...

f1 := round(N/32768.0)/256.0;
f2 := round((N-f1*32768.0)/128.0)/256.0;
f3 := (N-f1*32768.0-f2*128.0)/256.0;

Получается бред.

P.S.
Битовых операций нет. f1,f2,f3 могут принимать значение от 0 до 1.


@!!ex   (2009-07-06 11:52:00) [21]

> [16] Anatoly Podgoretsky ©   (06.07.09 11:50)

Мантисы и экспоненты может и не быть.
Я НЕ ЗНАЮкак работает видео процессор с цветовыми каналами текстуры.
Это может  быть число с фикисрованной точкой, с плавающей. Или как то по другому представленное.

Я знаю две вещи:
1) на число выделяется 8 бит
2) Число может принимать значение от 0 до 1.


Anatoly Podgoretsky   (2009-07-06 11:50:00) [22]

> @!!ex  (06.07.2009 11:45:15)  [15]

Физическое представление не нужно, есть мантиса и экспонента - этого достаточно.


@!!ex   (2009-07-06 11:45:00) [23]

> [14] Anatoly Podgoretsky ©   (06.07.09 11:41)

Я еще раз прошу ЗАБЫТЬ о техническом представлении числа.
Я понятия не имею как оно хранится.
Я знаю что оно хрнаится в 8 битах, и знаю что оно может принимать значение от 0 до 1.
ВСЕ.
Забудьте вы о представлении.
Мне математическое решение надо, не основанное на технологиях.


Anatoly Podgoretsky   (2009-07-06 11:41:00) [24]

Математически у тебя для хранения в лучшем случае остается 6, максимум 7 бит, иначе число не Float


sniknik   (2009-07-06 11:23:00) [25]

хотя, для палитры точность до единицы не существенна, и если на нее "забить" то целочисленные вполне подойдут.


@!!ex   (2009-07-06 11:21:00) [26]

Да без разницы как оно хранится.
Доступа к его представлению НЕТ.
Это математическаязадача, а не технологическая.


sniknik   (2009-07-06 11:19:00) [27]

> Вы не правильно поняли.
я правильно понял. это ты не знаешь как устроено вещественное число.

> А если Т/N - целое?
да все равно, для хранения 3х байтового числа, нужны 3 байта, целиком, даже если извращенно разделяешь его на 3 отдельных...
в целом - минус место под признаки "дробности", но для оригинальных значений места все одно не остается.


Leonid Troyanovsky   (2009-07-06 11:19:00) [28]


> @!!ex ©   (06.07.09 11:12) [9]

> понятно. А если N - целое?

N - мало, надо, по-крайней мере, M.

Можешь считать, что в каждом байте у тебя хранитcя дробь: B[i] / 255.

--
Regards, LVT.


@!!ex   (2009-07-06 11:12:00) [29]

понятно. А если N - целое?


@!!ex   (2009-07-06 11:12:00) [30]

> [7] Anatoly Podgoretsky ©   (06.07.09 11:08)

понятно. А если Т - целое?


Anatoly Podgoretsky   (2009-07-06 11:08:00) [31]

> @!!ex  (06.07.2009 10:24:00)  [0]

Никак, поскольку имеется всего 24 бита, а мантиса, даже не разделеная тоже 24 бита, поэтому места для трех экспонент просто нет.


@!!ex   (2009-07-06 11:04:00) [32]

> [5] sniknik ©   (06.07.09 11:00)

дробность и не нужна.

Вы не правильно поняли.
> f1,f2,f3 могут принимать значение от 0 до 1.
Это не значит что в этих числах хранится что-то.
Это значит, что эти числа могут принимать только значения от 0 до 1. Тоесть в них НЕЛЬЗЯ сохранить 2 или 5 или 100.


sniknik   (2009-07-06 11:00:00) [33]

> Есть некоторое число N в пределах от 0 до 8388608.
> Есть три float f1,f2,f3 разрядность у них 8 бит.
представить число до 8388608 можно в 3 байтах ровно.
т.е. 3 флоата будут заняты полностью и не в форме чисел с плавающей запятой а как целочисленные. под значения их самих
> f1,f2,f3 могут принимать значение от 0 до 1.
и под признаки "дробности" места не остается.


@!!ex   (2009-07-06 10:36:00) [34]

> [2] icWasya ©   (06.07.09 10:33)
> Что такое 8-битовый Float?

Число с плавающей точкой хранящаеся в 8 битах.


> [2] icWasya ©   (06.07.09 10:33)
> Откуда такая задача?

нужно в 8 битной текстуре сохранить позицию фрагмента в RGB каналах.


> [2] icWasya ©   (06.07.09 10:33)
> Попробуй вместо round использовать trunc.

Я вообще floor использую. Сам лагоритм явно неверен.


> [3] Dennis I. Komarov ©   (06.07.09 10:33)

Нужно сохранить число N в трех отдельных числах, а потом из этих трех чисел получиьт число максимально близкое к N


Dennis I. Komarov   (2009-07-06 10:33:00) [35]

??? Я ничего не понял... Сформулируй еще раз... ;)


icWasya   (2009-07-06 10:33:00) [36]

Что такое 8-битовый Float?
Откуда такая задача?
Попробуй вместо roundиспользовать trunc.


@!!ex   (2009-07-06 10:27:00) [37]

P.P.S.
По поводу магических чисел в коде:
128 - потому что предполагается хранить в f3 двойную точность.
256 - потому что 8 бит, значит 256 значений.
32768 - это 256(f2 с одинарной точностью)*128(f3 с двойной точностью)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо