Tengo algunas pruebas de unidad C# que realizan algunas operaciones de flotación/doble y me gustaría probarlas en una unidad. Assert.AreEqual es insuficiente debido a errores de redondeo.Prueba unitaria de las operaciones de flotación en Visual Studio 2008 Pro
Conversión de unidad de toma como ejemplo. 10.5 metros a pies tiene un factor de conversión de 3.281, así que obtengo 34.4505. Utilizar un factor de conversión más preciso me da 34.4488189. Quiero probar esto dentro, digamos, 0.1 (entonces 34.3488-34.5488 pasaría la prueba).
pude cierta probar manualmente el valor con una tolerancia en mi prueba de la unidad, pero eso es muy repetitivo y el mensaje de fallo no sería muy descriptiva (de nuevo sin tener que escribir mi propio mensaje de fallo de aserción):
Assert.IsTrue(Math.Abs(34.4488189 - value) < 0.1);
¿Cómo puedo probar la unidad de mis operaciones de flotación dentro de una cierta tolerancia de error? No puedo encontrar ninguna clase de Assert que haga esto que viene con VS. ¿Me estoy perdiendo o tengo que hacer mi propio?
¿Hay prácticas estándar en las pruebas de flotantes/dobles para tener en cuenta?
¡Hah! 18 sobrecargas para AreEqual. No es de extrañar que no lo haya captado. –
advertencia, utilizando 'double.Epsilon' no hará lo que usted quiere que haga. Epsilon es el valor de precisión doble más pequeño. Esto solo aplica si está comparando valores que están en el orden de 10^-324, lo cual es muy poco probable.Lo que quiere hacer es comparar valores dobles hasta el último dígito que puedan representar. Por lo tanto, la tolerancia podría ser de mil si comparas valores que están en los cuatrillones. La palabra de moda es "ULP" (unidades en último lugar). ver http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm –