svn: /phpdoc/es/trunk/language/types/ float.xml

From: Date: Fri, 26 Nov 2010 21:39:57 +0000
Subject: svn: /phpdoc/es/trunk/language/types/ float.xml
Groups: php.doc.es 
Request: Send a blank email to doc-es+get-3795@lists.php.net to get a copy of this message
jpberdejo Fri, 26 Nov 2010 21:39:57 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=305781 Log: Nueva normativa para las actualizaciones de ficheros. Changed paths: U phpdoc/es/trunk/language/types/float.xml Modified: phpdoc/es/trunk/language/types/float.xml =================================================================== --- phpdoc/es/trunk/language/types/float.xml 2010-11-26 21:00:03 UTC (rev 305780) +++ phpdoc/es/trunk/language/types/float.xml 2010-11-26 21:39:57 UTC (rev 305781) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 301112 Maintainer: yago Status: ready --> +<!-- EN-Revision: 305581 Maintainer: jpberdejo Status: ready --> <sect1 xml:id="language.types.float"> <title>Números de punto flotante</title> @@ -43,30 +43,33 @@ <warning xml:id="warn.float-precision"> <title>Precisión del punto flotante</title> - - <para> - Es bastante común que algunas fracciones decimales simples como - <literal>0.1</literal> o <literal>0.7</literal> no puedan ser convertidas - a su representación binaria interna sin perder un poco de precisión. Esto - puede llevar a resultados confusos: por ejemplo, - <literal>floor((0.1+0.7)*10)</literal> usualmente devolverá - <literal>7</literal> en lugar del esperado <literal>8</literal> ya que el - resultado de la representación interna es en realidad algo como - <literal role="infdec">7.9</literal>. + +<para> + Los números de punto flotante tienen una precisión limitada. Aunque depende del + sistema, PHP típicamente utiliza el formato de doble precisión IEEE 754, el cual + dará un error relativo máximo por aproximación del orden de 1.11e-16. + Las operaciones aritméticas elementales no podrá dar grandes errores y por supuesto, + los errores por propagación deben ser considerados cuando varias operaciones son + compuestas. </para> - + <para> - Esto se debe a que es imposible expresar de forma exacta algunas - fracciones en notación decimal con un número finito de dígitos. Por - ejemplo, <literal>1/3</literal> en forma decimal se convierte en - <literal role="infdec">0.3</literal>. + Adicionalmente, los numeros racionales que son representables exactamente como números + de punto flotante en base 10, como <literal>0.1</literal> o + <literal>0.7</literal>, no tienen una representación exacta como números + de punto flotante en base 2, el cual es usado internamente, sin importar el tamaño de + la mantisa. Por lo tanto, no se puede convertir en sus contrapartes binarias + internas sin una pequeña pérdida de precisón. Esto puede llevar a confundir + resultados: Por ejemplo, <literal>floor((0.1+0.7)*10)</literal> usualmente + retornará <literal>7</literal> en lugar del <literal>8</literal> esperado, + ya que la representación interna será algo así como + <literal>7.9999999999999991118...</literal>. </para> <para> - Así que nunca confíe en resultados de números flotantes hasta el último - dígito, y nunca compare números de punto flotante para conocer si son - equivalentes. Si realmente necesita una mejor precisión, las <link - linkend="ref.bc">funciones matemáticas de precisión arbitraria</link> y + Así que nunca se confía en resultados de números flotantes hasta el último dígito y nunca se comparan + números de punto flotante para igualdad. Si es necesaria una mejor precisión, + las <link linkend="ref.bc">funciones matemáticas de precisión arbitraria</link> y las funciones <link linkend="ref.gmp">gmp</link> están disponibles. </para> </warning>

« previous php.doc.es (#3795) next »