<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>WebHome/TrabajosPracticos/PracticoFLOAT8</title><revhistory><revision><revnumber>28</revnumber><date>2012-08-22 19:55:28</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>27</revnumber><date>2012-05-15 17:11:05</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>26</revnumber><date>2012-05-15 17:10:36</date><authorinitials>GuillermoSteiner</authorinitials><revremark>Se cambia nombre desde &quot;WebHome/TrabajosPracticos/PracticoFLOAT7&quot;</revremark></revision><revision><revnumber>25</revnumber><date>2010-10-19 18:32:51</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>24</revnumber><date>2010-10-19 18:31:47</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>23</revnumber><date>2010-10-19 18:31:32</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>22</revnumber><date>2010-10-19 18:30:04</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>21</revnumber><date>2010-10-19 18:28:51</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>20</revnumber><date>2010-10-19 18:27:08</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>19</revnumber><date>2010-10-19 18:26:46</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>18</revnumber><date>2010-10-19 18:22:07</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>17</revnumber><date>2010-10-19 17:25:46</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>16</revnumber><date>2010-10-19 17:25:35</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>15</revnumber><date>2010-10-19 17:24:58</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>14</revnumber><date>2010-10-19 17:24:39</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>13</revnumber><date>2010-10-19 17:24:17</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>12</revnumber><date>2010-10-19 17:22:35</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>11</revnumber><date>2010-10-19 17:18:23</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>10</revnumber><date>2010-10-19 17:17:54</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>9</revnumber><date>2010-10-19 17:16:42</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>8</revnumber><date>2010-10-19 17:15:46</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-10-19 17:14:29</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-09-09 14:02:27</date><authorinitials>GuillermoSteiner</authorinitials><revremark>Se cambia nombre desde &quot;TrabajosPracticos/PracticoFLOAT7&quot;</revremark></revision><revision><revnumber>5</revnumber><date>2010-09-09 14:01:48</date><authorinitials>GuillermoSteiner</authorinitials><revremark>Se cambia nombre desde &quot;PracticoFLOAT7&quot;</revremark></revision><revision><revnumber>4</revnumber><date>2010-06-01 16:41:11</date><authorinitials>TiN</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-06-01 16:41:01</date><authorinitials>TiN</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-06-01 16:40:48</date><authorinitials>TiN</authorinitials></revision></revhistory></articleinfo><section><title>Trabajo Práctico Nro. 8 Punto Flotante</title><para>Ejercicios en el uso de Punto Flotante IEEE-754 </para><para>web para pasar decimal a float <ulink url="http://babbage.cs.qc.cuny.edu/IEEE-754/Decimal.html"/> </para><section><title>Ejercicio 1</title><para>Convertir en numero 234,625 en formato de float y double  </para><para><emphasis role="strong">Solución</emphasis> </para><para>En primer lugar calculamos  </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII?action=cache&amp;do=get&amp;key=ee8c6fd4745bba75bef23b65ce11aa02867e4336"/></imageobject><textobject><phrase>$$ 2^n = 234,625$</phrase></textobject></inlinemediaobject> </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII?action=cache&amp;do=get&amp;key=8c0f0a7d2c1c45dc71561175cd63fe6c07b2956f"/></imageobject><textobject><phrase>$$ n = \frac{\log{234,625}}{\log{2}} = 7,874212935$</phrase></textobject></inlinemediaobject> </para><para>separamos el exponente en parte entera y decimal  </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII?action=cache&amp;do=get&amp;key=9d733fbfa3579697eeaca84860b6aca87ec6beaa"/></imageobject><textobject><phrase>$$ 2^{0,8742} \cdot 2^{7} = 234,625 $</phrase></textobject></inlinemediaobject> </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII?action=cache&amp;do=get&amp;key=c6d8e8f51752f6b5384ea004c3abaa6afbc7db12"/></imageobject><textobject><phrase>$$ 1,8330078125 \cdot 2^{7} = 234,625 $</phrase></textobject></inlinemediaobject> </para><para>La mantisa calculada está comprendida entre 1 &lt;= m &lt; 2, como corresponde a un número normalizado, resta ahora codificar cada elemento del número. </para><para><emphasis role="strong">Mantisa</emphasis> </para><para>La debemos pasar a binario  </para><informaltable><tgroup cols="3"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,8330078125   </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 1,666015625</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,666015625    </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 1,33203125</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,33203125     </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 0,6640625</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,6640625      </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 1,328125</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,328125       </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 0,65625</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,65625        </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 1,3125</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,3125         </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 0,625</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,625          </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 1,25</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,25           </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 0,5</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>0,5                    </para></entry><entry colsep="1" rowsep="1"><para> x 2 </para></entry><entry colsep="1" rowsep="1"><para> 1</para></entry></row></tbody></tgroup></informaltable><para>el valor final será  </para><para>1,1101010101 </para><para>el valor en la mantisa a almacenar solo posee los valores a la derecha de la coma  </para><informaltable><tgroup cols="2"><colspec colname="col_0"/><colspec colname="col_1"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> mantisa para float </para></entry><entry colsep="1" rowsep="1"><para> 11010101010000000000000 </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> mantisa para double </para></entry><entry colsep="1" rowsep="1"><para> 110101010100000000000000000000000000000000 </para></entry></row></tbody></tgroup></informaltable><para>Como vemos es muy importante evitar el redondeo, el mismo puede producir un error en los bit menos significativos y en este caso al no caer a 0 deberíamos haber seguido calculando hasta el bit 23 para float o 52 para double </para><para><emphasis role="strong">exponente</emphasis>  </para><para>La codificación del exponente exige que le sumemos al valor calculado un corrimiento, este corrimiento es la mitad del máximo valor que se puede guardar según el tipo de numero  </para><para>float  </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII?action=cache&amp;do=get&amp;key=8bdfebc12a81eb0eb4b1e34722239a0bcab5f023"/></imageobject><textobject><phrase>$$ e_{float} = e + 2^{n-1} -1 = 7 + 2^7 -1 = 134 $</phrase></textobject></inlinemediaobject> </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII?action=cache&amp;do=get&amp;key=35cbc648f7e00e90150be4c18166cf72276628d9"/></imageobject><textobject><phrase>$$ e_{double} = e + 2^{n-1} -1 = 7 + 2^{10} -1 = 1030 $</phrase></textobject></inlinemediaobject> </para><informaltable><tgroup cols="3"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> exponente para float </para></entry><entry colsep="1" rowsep="1"><para> 134 </para></entry><entry colsep="1" rowsep="1"><para> 10000110 </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> exponente para double </para></entry><entry colsep="1" rowsep="1"><para> 1030 </para></entry><entry colsep="1" rowsep="1"><para>10000000110</para></entry></row></tbody></tgroup></informaltable><para><emphasis role="strong">signo</emphasis> </para><para>el signo en este caso es positivo = 0 </para><para><emphasis role="strong">resultado</emphasis> </para><para>float </para><informaltable><tgroup cols="3"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para><code>31</code> </para></entry><entry colsep="1" rowsep="1"><para> <code>30    23</code> </para></entry><entry colsep="1" rowsep="1"><para> <code>22                    0</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> <code>0 </code> </para></entry><entry colsep="1" rowsep="1"><para> <code>10000110</code> </para></entry><entry colsep="1" rowsep="1"><para> <code>11010101010000000000000</code> </para></entry></row></tbody></tgroup></informaltable><para>double </para><informaltable><tgroup cols="3"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para><code>63</code></para></entry><entry colsep="1" rowsep="1"><para><code>62       52</code></para></entry><entry colsep="1" rowsep="1"><para><code>51                                                 0</code></para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para><code>0 </code></para></entry><entry colsep="1" rowsep="1"><para><code>10000000110</code></para></entry><entry colsep="1" rowsep="1"><para><code>1101010101000000000000000000000000000000000000000000</code></para></entry></row></tbody></tgroup></informaltable></section><section><title>Ejercicio 2</title><para>Expresar en hexadecimal la representación de 58,75 y -58,75 en formato float </para><para>Solución: 0x426B0000 y 0xC26B0000 </para></section><section><title>Ejercicio 3</title><para>Expresar en hexadecimal la representación de 4580 en formato float y double </para><para>Solución: 0x458F2000 y 0x40B1E40000000000 </para></section><section><title>Ejercicio 4</title><para>Realizar un programa en assembler que reciba como argumento un número de 32 bits entero y con signo y devuelva el valor transformado a float. </para></section></section></article>