From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Virus-Scanned: by AV scanner Date: Fri, 9 Feb 2007 09:47:13 +0300 From: Andrew Borodin To: =?koi8-r?B?y9XM2NTV0s7ZyiDPxtTP0MnL?= Message-ID: <20070209064713.GB3781@borodin.zarya> References: <679044850702080757p146770a7g2ad0dd27a97261c2@mail.gmail.com> <679044850702080901w1aee46cbsc95dd7e2cf0e484b@mail.gmail.com> <679044850702080905p1940c957n5110897229c0ae77@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <679044850702080905p1940c957n5110897229c0ae77@mail.gmail.com> User-Agent: Mutt/1.4.2.1i Subject: Re: [room] =?koi8-r?b?/c/Ezzog5NfPyd7O2cUg3snTzME=?= X-BeenThere: smoke-room@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Id: =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Feb 2007 06:44:55 -0000 Archived-At: List-Archive: 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. -- С уважением, А. Бородин.