¿Existe un buen patrón general para implementar tablas de verdad?patrón general para implementar tablas de verdad
Estoy volviendo a trabajar con algún código heredado (C++) y me acabo de dar cuenta de que la función con la que estoy trabajando equivale a una tabla de verdad con 3 entradas binarias y 8 salidas posibles. Aquí hay un ejemplo de dos de las ocho pruebas y salidas correspondientes:
// - + +
if ((prevdst5 < 0.0) && (dst5 > 0.0) && (nextdst5 > 0.0)){
thawpct = (dst5/(dst5 - prevdst5));
}
// - - +
if ((prevdst5 < 0.0) && (dst5 < 0.0) && (nextdst5 > 0.0)){
thawpct = (nextdst5/(nextdst5 - dst5));
}
// other cases...
return thawpct;
Básicamente me gustaría saber si hay un más limpio, más fácil de mantener/extensible * manera de configurar esto.
- ¿Qué ocurre si se agrega otra entrada? Entonces, la cantidad de sentencias if necesarias sería 16, lo cual, en mi opinión, sería demasiado complicado de manejar con el patrón actual.
- ¿Qué pasa si varios de los combos de entrada se asignan a la misma salida?
* La base de código es un modelo de ecosistema utilizado en la academia, por lo que el mantenimiento y la extensión equivalen a cosas similares según la perspectiva del codificador.
¿Seguro? es dst5 = 0.0 en otro lugar, o fuera del alcance? –
no estoy seguro de entender? en realidad, hay una prueba en la parte superior de la función: if (dst5 == 0.0) dst5 = 0.001; que creo que es un error (compare el número de punto flotante para la igualdad) – tbc
(demasiado tarde para modificar el comentario anterior) Solucionarlo aquí: no estoy seguro de que lo entiendo? en realidad hay una prueba como esta: if (dst5 == 0.0) dst5 = 0.001; para cada entrada en la parte superior de la función. De hecho, creo que esto es un error (compare el número de coma flotante para la igualdad), pero al menos se ocupa de la posibilidad de que cada entrada sea 0. – tbc