|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Число в с плавающей запятой поместить в 3 Байта
Добрый день.
Дано: число от 0 до 1 с точностью 9 знаков после запятой. Необходимо закодировать это число в три байта (каждый байт будет соответствовать каналу RGB) с максимально возможной точностью. Прочитал про нормализацию чисел. К сожалению в этом алгоритме используется 4ре байта. Далее пошёл в сторону деления значащих чисел на группы: Код:
0.298374629 0.29 0.0083 0.000074 RGB(29;83;74) Натолкните на адекватную идею пожалуйста, если такое вообще реализуемо. |
#2
|
|||
|
|||
Очевидно, что девять знаков в три байта не влезут, т.к. максимально возможное значение 2^24=16777216. Соответственно, чтобы записать число из диапазона 0..1 в три байта с максимально возможной точностью, нужно умножить его на 2^24.
|
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Цитата:
Я как-то не уловил о чём идёт речь: целые и дробные "кто"? |
#5
|
|||
|
|||
Ну, например, как-то так:
Код:
const n = 16777216; // 2^24 var x : double; rgb_raw : integer; r, g, b : byte; rgb : TColor; begin x := Random; // Get [0..1) number rgb_raw := round(x * n); // normalize, so, got value [0..n-1) // extract chanels b := rgb_raw mod 256; rgb_raw := rgb_raw div 256; g := rgb_raw mod 256; r := rgb_raw div 256; // Get TColor rgb := RGB(r,g,b); end; Мог где-то немножко напутать, но не думаю, что принципиально. |