[room] Щодо: Двоичные числа

Andrew Borodin =?iso-8859-1?q?borodin_=CE=C1_zarya-k=2Eru?=
Пт Фев 9 09:47:13 MSK 2007


On Thu, Feb 08, 2007 at 08:05:20PM +0300, Damir Shayhutdinov wrote:
> Уточненный алгоритм выглядит так:

> > 0. Остаток = дробной части исходного числа
> > 1. Если остаток равен 0, прекратить алгоритм
> > 2. Остаток < 0.5 ?
> > 3. Если да, то записать 0, и умножить остаток на  2.
> > 4. Иначе записать 1, отнять 0.5 и умножить на 2.
> > 5. Перейти к пункту 1.

> Заменил "Если больше или равно 0.5" на "Иначе".

Если точность задана, то все гораздо проще.

Надо дробную часть умножить на число "2 в степени точность"
(т. е. перенести в двоичном числе запятую на "точность" знаков 
вправо), отбросить у получившегося числа дробную часть (или 
правильно округлить до целого), и перевести получившееся целое 
число в двоичную форму. Затем перенести запятую назад, на 
"точность" знаков влево. Это и будет дробная часть.

Пример: перевести число 3.625 в двоичную форму с точностью 8 
знаков после запятой.

С целой частью как обычно: 3d == 11b.

Дробна часть:
 - умножаем 0.626 на 256 (256 == pow(2, 8)):  0.625 * 256 = 160.0

 - отбрасываем дробную часть и преводим в двоичную форму:
160d == 10100000b.

 - состыковываем: 3.625d == 11.101b.

-- 

С уважением,
А. Бородин.



Подробная информация о списке рассылки smoke-room