2010-10-19 12 views

Respuesta

5

Uso: bcadd()

echo bcadd(10359023529, 0.2137582935, 10); 
3

Esa es la limitación de un valor de coma flotante. Un valor de coma flotante se almacena como un coeficiente y exponente. Tendrás mucha precisión con números pequeños, y baja precisión con números altos. Aquí hay más detalles de los que desearía: http://en.wikipedia.org/wiki/IEEE_754-2008

Conclusión: los valores altos serán muy imprecisos. Intenta usar un rango de valor pequeño.

Aquí hay más información sobre la precisión de coma flotante específicamente en lo que respecta a PHP: http://php.net/manual/en/language.types.float.php

Si realmente necesita una gran precisión y un número elevado, mira aC matemáticas (http://www.php.net/manual/en/ref.bc.php) y GMP (http://www.php.net/manual/en/ref.gmp.php).

1

Hay una opción oscura en php.ini que define cuántos dígitos significativos mostrar al imprimir números en coma flotante. En mi caso se ve de la siguiente manera

; The number of significant digits displayed in floating point numbers. 
; http://php.net/precision 
precision = 14 

Por supuesto, esto se refiere sólo a formato, no el hecho fundamental de que los números de coma flotante son inherentemente imprecisos. De acuerdo con IEEE 754, la precisión del doble es 15.95 dígitos decimales.

+0

La precisión de salida no es el problema; el tipo de datos flotantes es solo tan preciso. – meagar

+0

En principio, tiene razón, pero en este caso particular no superó la doble precisión. –

+0

@ Adam Creo que lo hizo, en realidad; de lo contrario, su implementación se ha configurado específicamente para mostrar solo un lugar decimal cuando se emiten números de coma flotante, ya que el valor predeterminado es 14. – meagar

Cuestiones relacionadas