[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