實現真值表是否有一個很好的一般模式?實現真值表的一般模式
我正在重新編寫一些遺留代碼(C++),並意識到我正在使用的函數相當於一個帶有3個二進制輸入和8個可能輸出的真值表。這裏是2的8個測試和相應的輸出的一個示例:
// - + +
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;
基本上我想知道是否有一個更清潔,更易於維護/可擴展的方式*設置此。
- 如果添加了另一個輸入會怎麼樣?那麼if語句所需的數量應該是16,在我看來,使用當前模式管理起來太麻煩了。
- 如果幾個輸入組合應該映射到相同的輸出怎麼辦?
*代碼庫是學術界使用的生態系統模型,因此根據編碼人員的觀點,維護和擴展相當於類似的東西。
你確定嗎? dst5 = 0.0是否在其他地方,或超出範圍? –
不知道我明白嗎?實際上在函數頂部有一個測試: if(dst5 == 0.0)dst5 = 0.001; 我認爲這是一個錯誤(比較浮點數是否相等) – tbc
(太遲以至於無法修改以前的評論)解決方法:不知道我明白嗎?實際上有這樣一個測試:if(dst5 == 0.0)dst5 = 0.001;對於函數頂部的每個輸入。我實際上認爲這是一個錯誤(比較浮點數是否相等),但至少需要注意每個輸入爲0的可能性。 – tbc