* [room] Щодо: Двоичные числа
@ 2007-02-08 15:52 gns
2007-02-08 15:57 ` Damir Shayhutdinov
0 siblings, 1 reply; 11+ messages in thread
From: gns @ 2007-02-08 15:52 UTC (permalink / raw)
To: gns
Cc: культурный
офтопик
кстати запятая по ходу сохраняет место - бишь можно отдельно целую
часть отконвертить, а потом дробну ю: 0,26712 представить и
отконвертить как целое 26712 , а потом тупо дописать результат после
запятой (потому что значение разрядов сохранится, ибо 1/2 это 64/128)
2007/2/8, gns@altlinux.ru <gns@altlinux.ru>:
> как и десятичная дробь:
>
> 0,abcdefg... = a/2+b/4+c/8+d/16+e/32+f/64+g/128
>
> и алгоритм соответсвенно близко к алгоритму для целых
>
> 2007/2/8, Eugene Ostapets <eostapets@gmail.com>:
> > Попросили знакомым написать рассчетку для ленивого дитяти... А там в
> > задании необходимо среди прочего барахла превратить дробное число из
> > десятичного в двоичное... С точностью не менее 8 знаков в дробной
> > части... Забег по склерозу подсказал что в мои годы мы занимались
> > только целыми числами... Кто-то помнит/знает правила для записи
> > дробного числа в двоичном формате?
> >
> > --
> > С уважением,
> > Евгений Остапец
> > uin: 23747217
> > jid: eugene_ostapets@jabber.ru
> > _______________________________________________
> > smoke-room mailing list
> > smoke-room@lists.altlinux.org
> > https://lists.altlinux.org/mailman/listinfo/smoke-room
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 15:52 [room] Щодо: Двоичные числа gns
@ 2007-02-08 15:57 ` Damir Shayhutdinov
2007-02-08 16:00 ` gns
0 siblings, 1 reply; 11+ messages in thread
From: Damir Shayhutdinov @ 2007-02-08 15:57 UTC (permalink / raw)
To: культурный
офтопик
> кстати запятая по ходу сохраняет место - бишь можно отдельно целую
> часть отконвертить, а потом дробну ю: 0,26712 представить и
> отконвертить как целое 26712 , а потом тупо дописать результат после
> запятой (потому что значение разрядов сохранится, ибо 1/2 это 64/128)
Не получится.
0.1b = 0.5d
однако 5 если переводить в двоичный вид будет 101.
0.101b = 0.625d
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 15:57 ` Damir Shayhutdinov
@ 2007-02-08 16:00 ` gns
2007-02-08 16:31 ` Eugene Ostapets
0 siblings, 1 reply; 11+ messages in thread
From: gns @ 2007-02-08 16:00 UTC (permalink / raw)
To: культурный
офтопик
да, я уже обломался :)
2007/2/8, Damir Shayhutdinov <lost404@gmail.com>:
> > кстати запятая по ходу сохраняет место - бишь можно отдельно целую
> > часть отконвертить, а потом дробну ю: 0,26712 представить и
> > отконвертить как целое 26712 , а потом тупо дописать результат после
> > запятой (потому что значение разрядов сохранится, ибо 1/2 это 64/128)
> Не получится.
>
> 0.1b = 0.5d
> однако 5 если переводить в двоичный вид будет 101.
> 0.101b = 0.625d
> _______________________________________________
> smoke-room mailing list
> smoke-room@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/smoke-room
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 16:00 ` gns
@ 2007-02-08 16:31 ` Eugene Ostapets
2007-02-08 17:01 ` Damir Shayhutdinov
0 siblings, 1 reply; 11+ messages in thread
From: Eugene Ostapets @ 2007-02-08 16:31 UTC (permalink / raw)
To: культурный
офтопик
2007/2/8, gns@altlinux.ru <gns altlinux.ru>:
> да, я уже обломался :)
>
> 2007/2/8, Damir Shayhutdinov <lost404@gmail.com>:
> > > кстати запятая по ходу сохраняет место - бишь можно отдельно целую
> > > часть отконвертить, а потом дробну ю: 0,26712 представить и
> > > отконвертить как целое 26712 , а потом тупо дописать результат после
> > > запятой (потому что значение разрядов сохранится, ибо 1/2 это 64/128)
> > Не получится.
> >
> > 0.1b = 0.5d
> > однако 5 если переводить в двоичный вид будет 101.
> > 0.101b = 0.625d
так знает кто-то правило? Ибо пользоваться qalculator я тоже умею, но
беглый взгляд в его исходники убедил меня что алгоритм преобразования
я из него не вытащу... :)
--
С уважением,
Евгений Остапец
uin: 23747217
jid: eugene_ostapets@jabber.ru
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 16:31 ` Eugene Ostapets
@ 2007-02-08 17:01 ` Damir Shayhutdinov
2007-02-08 17:05 ` Damir Shayhutdinov
2007-02-08 21:19 ` Aleksey Korotkov
0 siblings, 2 replies; 11+ messages in thread
From: Damir Shayhutdinov @ 2007-02-08 17:01 UTC (permalink / raw)
To: культурный
офтопик
> так знает кто-то правило? Ибо пользоваться qalculator я тоже умею, но
> беглый взгляд в его исходники убедил меня что алгоритм преобразования
> я из него не вытащу... :)
Вот например:
надо перевести число 0.625 в двоичное.
0. Остаток = дробной части
1. Если остаток равен 0, прекратить алгоритм
2. Остаток < 0.5 ?
3. Если да, то записать 0, и умножить остаток на 2.
4. Если больше или равен 0.5 - то записать 1, отнять 0.5 и умножить на 2.
5. Перейти к пункту 1.
Например:
0.625 (0, <тут будут цифры дроби>)
0.625 != 0
Оно больше чем 0.5 - по этому надо записать после запятой 1, отнять
0.5 и умножить на 2.
0.625 - 0.5 = 0.125 (0,1<>)
0.125 * 2 = 0.25 (0,1<>)
Теперь опять на пункт 1.
0.25 != 0
0.25 < 0.5 ? да. Поэтому записываем 0, умножаем на 2.
0.25 * 2 = 0.5 (0,10<>)
Переходим опять к пункту 1.
0.5 < 0.5 ? нет. Записываем 1, отнимаем 0.5, умножаем на 2
0.5 - 0.5 = 0 (0,101<>)
0 * 2 = 0 (0,101<>)
Переходим к пункту 1. В остатке получили 0. Алгоритм закончен.
Итого: 0.625 = 0.101
В принципе, для всех дробей, делитель которых не является степенью 2 -
результатом будет периодическая дробь
.
Чтобы определить период, надо продолжать алгоритм до тех пор, пока
остаток не начнет повторяться. Тогда та часть, которая была получена
между двумя одинаковыми остатками, будет периодом.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 17:01 ` Damir Shayhutdinov
@ 2007-02-08 17:05 ` Damir Shayhutdinov
2007-02-09 6:47 ` Andrew Borodin
2007-02-08 21:19 ` Aleksey Korotkov
1 sibling, 1 reply; 11+ messages in thread
From: Damir Shayhutdinov @ 2007-02-08 17:05 UTC (permalink / raw)
To: культурный
офтопик
Уточненный алгоритм выглядит так:
> 0. Остаток = дробной части исходного числа
> 1. Если остаток равен 0, прекратить алгоритм
> 2. Остаток < 0.5 ?
> 3. Если да, то записать 0, и умножить остаток на 2.
> 4. Иначе записать 1, отнять 0.5 и умножить на 2.
> 5. Перейти к пункту 1.
Заменил "Если больше или равно 0.5" на "Иначе".
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 17:01 ` Damir Shayhutdinov
2007-02-08 17:05 ` Damir Shayhutdinov
@ 2007-02-08 21:19 ` Aleksey Korotkov
2007-02-08 21:37 ` Damir Shayhutdinov
1 sibling, 1 reply; 11+ messages in thread
From: Aleksey Korotkov @ 2007-02-08 21:19 UTC (permalink / raw)
To: культурный
офтопик
В Чтв, 08/02/2007 в 20:01 +0300, Damir Shayhutdinov пишет:
> В принципе, для всех дробей, делитель которых не является степенью 2 -результатом
> будет периодическая дробь.
:) Какой период, например, у 0.0110111001011101111000...? И что означает
фраза: "делитель которых не является степенью 2"?
P.S. Когда-то давно писал я прогу (на паскале) для перевода чисел из
одной c/c в другую (с основаниями в пределах 2..36) с заданной
точностью.
P.P.S. Что такое щодо?
--
С уважением,
А.В.Коротков,
mailto:ziga@uni.udm.ru
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 21:19 ` Aleksey Korotkov
@ 2007-02-08 21:37 ` Damir Shayhutdinov
2007-02-09 4:12 ` Aleksey Korotkov
2007-02-09 6:45 ` Nick S. Grechukh
0 siblings, 2 replies; 11+ messages in thread
From: Damir Shayhutdinov @ 2007-02-08 21:37 UTC (permalink / raw)
To: ziga,
культурный
офтопик
09.02.07, Aleksey Korotkov<ziga.udm.net> написал(а):
> В Чтв, 08/02/2007 в 20:01 +0300, Damir Shayhutdinov пишет:
> > В принципе, для всех дробей, делитель которых не является степенью 2 -результатом
> > будет периодическая дробь.
>
> :) Какой период, например, у 0.0110111001011101111000...?
Например, 0.0(110111001011101111000)
Под дробью понимается рациональное число.
> И что означает
> фраза: "делитель которых не является степенью 2"?
Дробь, которая не может быть сокращена до того, чтобы в знаменателе
стояла степень двойки.
Например, 25/100 (0.25) может быть сокращено до 1/4 (в знаменателе
степень двойки) - поэтому в двоичном виде она будет представлена
конечной дробью.
А 26/100 не может быть сокращено таким образом - и будет представлено
в двоичном виде бесконечной периодической дробью.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 21:37 ` Damir Shayhutdinov
@ 2007-02-09 4:12 ` Aleksey Korotkov
2007-02-09 6:45 ` Nick S. Grechukh
1 sibling, 0 replies; 11+ messages in thread
From: Aleksey Korotkov @ 2007-02-09 4:12 UTC (permalink / raw)
To: Damir Shayhutdinov
Cc: культурный
офтопик
В Птн, 09/02/2007 в 00:37 +0300, Damir Shayhutdinov пишет:
> Например, 0.0(110111001011101111000)
Хе-хе. С какой стати? Вы вообще даже не поняли, что я за дробь
написал :)
> Под дробью понимается рациональное число.
Речь шла о вещественных числах.
> > И что означает> фраза: "делитель которых не является степенью 2"?
> Дробь, которая не может быть сокращена до того, чтобы в знаменателестояла
> степень двойки.
Это очень своеобразные определения :). В математике фразы типа "делитель
которых не является степенью 2" относят к делению целых чисел.
--
С уважением,
А.В.Коротков,
mailto:ziga@uni.udm.ru
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 21:37 ` Damir Shayhutdinov
2007-02-09 4:12 ` Aleksey Korotkov
@ 2007-02-09 6:45 ` Nick S. Grechukh
1 sibling, 0 replies; 11+ messages in thread
From: Nick S. Grechukh @ 2007-02-09 6:45 UTC (permalink / raw)
To: культурный
офтопик
не знаю про ту дробь, но вот иррациональное двоичное число:
0,10110111011110111110111111011111110111111110... :) но нам в общем
пофиг, потому что сказано до 8 знаков
PS. щодо - это гугл мейл на несуществующием языке пишет. "по поводу",
"относительно". Re: короче.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [room] Щодо: Двоичные числа
2007-02-08 17:05 ` Damir Shayhutdinov
@ 2007-02-09 6:47 ` Andrew Borodin
0 siblings, 0 replies; 11+ messages in thread
From: Andrew Borodin @ 2007-02-09 6:47 UTC (permalink / raw)
To: культурный
офтопик
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.
--
С уважением,
А. Бородин.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2007-02-09 6:47 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-08 15:52 [room] Щодо: Двоичные числа gns
2007-02-08 15:57 ` Damir Shayhutdinov
2007-02-08 16:00 ` gns
2007-02-08 16:31 ` Eugene Ostapets
2007-02-08 17:01 ` Damir Shayhutdinov
2007-02-08 17:05 ` Damir Shayhutdinov
2007-02-09 6:47 ` Andrew Borodin
2007-02-08 21:19 ` Aleksey Korotkov
2007-02-08 21:37 ` Damir Shayhutdinov
2007-02-09 4:12 ` Aleksey Korotkov
2007-02-09 6:45 ` Nick S. Grechukh
Культурный офтопик
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/smoke-room/0 smoke-room/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 smoke-room smoke-room/ http://lore.altlinux.org/smoke-room \
smoke-room@lists.altlinux.org smoke-room@lists.altlinux.ru smoke-room@lists.altlinux.com smoke-room@altlinux.ru smoke-room@altlinux.org smoke-room@altlinux.com
public-inbox-index smoke-room
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.smoke-room
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git