| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| въпрос за плаваща запетая http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=8039 |
Страница 1 от 1 |
| Автор: | uglyduck [ Сря Авг 11, 2010 12:46 pm ] |
| Заглавие: | въпрос за плаваща запетая |
Искам да попитам относно смятането на числа с плаваща запетая, че не ми стана ясно нещо. Чета IEEE 754-1985 и почвам да проигравам примера в "Single-precision 32-bit" секцията - числото е: 0 _ 01111100 _ 0100000000000000000000 (знаков бит _ 8-бит експонента _ 23-битова мантиса) Според формулата V = (-1)^s * 2^(exponent - 127) * (1+fraction) би трябвало да се получи 1 * 2^(-3) * 1,25 = 0,15625 Е, тъп съм и се чудя в какъв формат е представена мантисата - прав код, обратен, допълнителен... Със сигурност са прави, но все пак, как от 1.01 (двоично) се получава 1.25 (десетично)? Това ме обърква. |
|
| Автор: | tgi [ Сря Авг 11, 2010 1:18 pm ] |
| Заглавие: | |
Мантисата е най-обикновено двоично число. Избутана е наляво докато удари с единица в експонента _и още веднъж_, т.е. най-старшият бит на мантисата е винаги по подразбиране 1 и е извън 23-те бита, които се пишат. Изключение правят т.нар. "tiny" числа, при които експонентът е 0, тогава мантисата просто е двоично число без избутване наникъде и без подразбираща се невписана най-старша 1-ца. |
|
| Автор: | tntpcb [ Сря Авг 11, 2010 1:31 pm ] | |||||||||
| Заглавие: | Re: въпрос за плаваща запетая | |||||||||
за fraction имаш: 0100000000000000000000 (това е дробна чист - подобно на 10-тичните но с основа 2 което е 2^(-2)=0.25 от (1+fraction): 1 + 0.25 = 1.25 |
||||||||||
| Автор: | uglyduck [ Сря Авг 11, 2010 4:13 pm ] |
| Заглавие: | |
Загрях Бях свикнал да чета двоичните числа от дясно на ляво - понеже младшия бит е обикновено в дясно. Примерно 0011 bin = 3 dec... При floating pointa малко извратено ми се вижда, още повече, че и във въпросната документация са посочили младшия бит от дясно. Както и да е, вероятно си има причини; ще свикна. Значи просто мантисата (fraction според IEEE) се смята така (подразбира се, че най-старшият бит на мантисата винаги е 1) - примерно: 01100.....0 става равно на 0 * 1/2^1 + 1 * 1/2^2 + 1 * 1/2^4 = 1/4 + 1/8 = 0.25 + 0.125 = 0.375 и като добавим подразбиращата се единица става 1.375 |
|
| Автор: | ike [ Сря Авг 11, 2010 4:17 pm ] |
| Заглавие: | |
За домашно представи числото 3.375 |
|
| Автор: | uglyduck [ Сря Авг 11, 2010 6:17 pm ] |
| Заглавие: | |
Много смешно 3.375 => S = 0 E = 10000000 bin = 128 dec F = 101100...0 bin = 0.6875 => fraction = 1.6875 => V = (-1)^S * 2^(E-127) * (1+F) = 1 * 2^1 * (1+0.6875) = 3.375 |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|