Pregunta

¿Existe en Ruby alguna funcionalidad / sintaxis para comparar dos flotantes con delta? Algo similar a assert_in_delta (expected_float, actual_float, delta) de test / unit pero devolviendo Boolean?

¿Fue útil?

Solución

(expected_float - actual_float).abs <= delta

Otros consejos

Dependiendo de su aplicación y de lo que realmente representan sus valores de punto flotante, podría tener sentido convertirlos a Rationals con una precisión dada. Entonces las comparaciones directas siempre se comportarán correctamente ya que los Racionales son solo dos enteros.

Por ejemplo, si sabe que está tratando con montos en moneda estadounidense, almacenarlos como amount.to_r.round (2) permite realizar comparaciones exactas para la igualdad.

Solo un pensamiento ... no todos los valores no enteros tienen que ser flotantes inexactamente representados

También puede necesitar un cálculo de tolerancia relativa / delta

http://realtimecollisiondetection.net/blog/?p=89

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top