svn: /phpdoc/es/trunk/language/types/ float.xml
| From: | Juan Pablo Berdejo | 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>