![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как представить число в виде трех float чисел.
@!!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 с двойной точностью)