| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Перевод числа с плавающей точкой в 2-ый код |
| Автор: SIMarOK 15.9.2005, 18:02 |
| Помогите пожалуйста, кто знает, перевести число 27.00141 в дваичный код, желательно расписывать действия, а то калькулятор только ответ выводит Спасибо |
| Автор: Mayk 15.9.2005, 18:16 |
| Тебе нужно перевести число в двоичную систуму счисления, или узнать как его(число) хранит в памяти комп? |
| Автор: SIMarOK 15.9.2005, 18:22 | ||
И перевести, и как располагается, очень был бы признателен |
| Автор: esperant0 15.9.2005, 19:01 |
| 0.4 переведем в бинарный код. для этого нужно умножать на два и смотреть на целую часть. 0.4*2=0.8 (целая часть ноль) 0.8*2=1.6 ( целеая часть 1 откинем ее) 0.6*2=1.2( целеая часть 1 откинем ее) 0.2*2=0.4 ( получили уже встречающееся число, значит запись переодическая) 0.4=0.011011011 В записи числа после точки, идут(сверху вниз) получавшиеся целые части. |
| Автор: Mayk 15.9.2005, 19:10 |
| Относительно перевода. В начале переводишь целую часть, потом складываешь. Пусть надо перевести 2570.00142 Алгоритм перевода целой части из 10ной в любую, берем ... (СЮРПРИЗ) 10-ную(так легче понять соль) Делишь на основание системы, то есть 10. 2570/10 = 257 остаток 0. 0 - цифра числа в требуемой системе 257/10 = 25 остаток 7. 7 - цифра числа в требуемой системе 25/10 = 2 остаток 5. 5 - цифра числа в требуемой системе 2/10 = 0 остаток 2. 2 - цифра числа в требуемой сс 0 - хватит делить, все цифры получены Как видно на каждом шаге мы делим на основание сс, "сдвигая" всё число на один разряд. Чтобы получить число, полученные цифры в остатках следует записать в обратном порядке(то есть 2,5,7,0 - получится 2570) 2570=2570. Тип топ. Если хочешь получить число в двоичной, то поступаешь так же, но вместо 10ки делишь на два. Алгоритм перевода дробной части из 10ной в любую, берем ... (БАЯН) 10-ную. Итак, узнаеи цифры в числе .00142. Если раньше последовательно делили, то теперь последовательно умножаем на основание СС, выдвигая таким образом нужную нам цифру. .00141 * 10 = 0.0142 0 - цифра числа в требуемой системе .0141 * 10 = 0.142. 0 - цифира числа в требуемой системе .141 * 10 = 1.42. 1 - цифра числа в требуемой системе .41 * 10 = 4.2. 4 - цифра числа в требуемой системе .2*10 = 2.0, 2 - цифра числа. Как видно в данном случае найденный цифры числа идут сверху вниз. .00142 = .00142. Верно. Переведем по подобному алгоритму 33.25. 33 / 2 = 16 остаток 1 16 / 2 = 8 остаток 0 8 / 2 = 4 остаток 0 4 / 2 = 2 остаток 0 2 / 2 = 1 остаток 0 1 / 2 = 0 остаток 1 сл-но 33 - это 100001 в двоичной(что есть правда) или то же самое в двоичной системе 100001 / 10 = 10000 остаток 1 10000 / 10 = 1000 остаток 0 1000 / 10 = 100 остаток 0 100 / 10 = 10 остаток 0 10 / 10 = 1 остаток 0 1 / 10 = 0 остаток 1 То есть благодаря делению в остаток заносится 1 цифра исходного числа. Переводим 0.25 0.25 * 2 = 0.5 0.5 * 2 = 1.0 Таким образом в двоичной сс 0.25 выглядит как 0.01. Переведём двоичное 0.01 в двоичное: 0.01 * 10 = 0.1 0.1 * 10 = 1.0 Как видно при умножении на 2 в целые числа попадает цифра исходного числа. Переводы из Nной СС(системы счисления) в Nную СС хорошо покаывают как данный алгоритм получает цифры исходного числа). Кстати не все дробные числа нормально переводятся между сс. Так например при переводе одной десятой в двоичную получится бесконечная дробь (как и при переводе из 0.1 в троичной в десятичную (3 в степени -1 - это бесконечная дробь)) ----------------------------------------- Про хранения флоатов в памяти советую почитать например http://prometey.bsuir.unibel.by/update/open/confrc/oiivt/2_3.html. Если в кратце, то в памяти хранятся все двоичные цифры числа, кроме первой(которая равна единице), позиция запятой и знак. |