2011-06-05 16 views

Respuesta

10

6.1E-17 es casi cero de todos modos [*]. Si necesita comparar realmente el resultado con cero, en matemática de coma flotante debe verificar que esté dentro de una cierta tolerancia del valor deseado, ya que la mayoría de los números no se pueden representar correctamente.

$x = cos(deg2rad($angle)); 
$is_zero = (abs($x) < 1e-10); 

estrictamente hablando, por supuesto, el cero es en realidad un número que puede ser representados correctamente en coma flotante. El verdadero problema es que pi/2.0 no puede ser, por lo que la entrada a su función cos no es "correcta".

[*] Para poner esto en contexto, tomada como una proporción de 1 UA (la distancia media entre el Sol y la Tierra) es equivalente a 0,0092 milímetros , o alrededor de un tenth of the average width de un cabello humano ..

4

6.12323399574E-17 es un número de punto flotante extremadamente pequeño (17 ceros después del punto decimal seguido de un 6), casi indistinguible de 0. Si se trata de puntos flotantes (como cualquier función de coseno debe), no puede evitar problemas como este. Si necesita comparar un número de punto flotante a cero, debe hacerlo con barras de error (es decir, este número dentro de un cierto rango de valores alrededor de cero), no una comparación absoluta, incluso con funciones más simples que el coseno. Si solo necesita hacer algunos cálculos con el resultado (agréguelo, multiplíquelo, lo que sea), se comportará casi exactamente igual a cero, por lo que no tendrá que preocuparse.

1

Prueba este

$x = round(cos(deg2rad($angle)), 3); 
Cuestiones relacionadas