Czy istnieje dobry ogólny wzorzec wdrażania tabel prawdy?ogólny wzór implementacji tabel prawdy
Jestem ponownie pracuje trochę starszych kod (C++) i po prostu sobie sprawę, że funkcja Pracuję z kwot do tabeli prawdy z 3 wejściami cyfrowymi i 8 możliwych wyjść. Oto przykład dwóch z ośmiu testów i odpowiadających im wyjść:
// - + +
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;
zasadzie zastanawiam się, czy jest czystsze, bardziej linkujących/rozszerzalny * sposób to skonfigurować.
- Co się stanie, jeśli zostanie dodane kolejne wejście? Wtedy liczba potrzebnych instrukcji to 16, co moim zdaniem byłoby zbyt kłopotliwe, aby poradzić sobie z bieżącym wzorcem.
- Co należy zrobić, jeśli kilka zestawów danych wejściowych ma odwzorować to samo wyjście?
* Baza kodów jest modelem ekosystemu stosowanym w środowisku akademickim, więc czynności konserwacyjne i rozszerzenie są podobne do rzeczy zależnych od perspektywy programisty.
Czy jesteś pewien? czy dst5 = 0.0 gdzieś indziej, czy poza zakresem? –
Nie jestem pewien, czy rozumiem? faktycznie istnieje test na górze funkcji: jeśli (dst5 == 0,0) dst5 = 0,001; co moim zdaniem jest błędem (porównaj liczbę zmiennoprzecinkową dla równości) – tbc
(za późno, aby zmienić poprzedni komentarz) Napraw tutaj: nie jestem pewien, rozumiem? faktycznie istnieje taki test: if (dst5 == 0,0) dst5 = 0,001; dla każdego wejścia na górze funkcji. Właściwie uważam, że to błąd (porównaj liczbę zmiennoprzecinkową dla równości), ale przynajmniej dba o to, aby każde wejście było 0. – tbc