你的一个计数不正确。你说:
if ((n > 0) && (n < 100)) { // 3 boolean expressions will be executed in 100% cases.
但是(1)
&&
不是布尔表达式,而是隐式表达式
if
因为它使表达式短路,以及(2)由于后半部分短路
n < 100
只有99%的案件会被执行。只有
n > 0
将在100%的病例中进行检查。
除此之外,你过于关注频率
条件
评估。这是次要的问题,因为首先要注意的是,检查是不可避免的
二
可以输入最频繁分支之前的条件。
考虑到这一点,您现在可以开始询问是否有可能以更高的概率避免检查这两个条件中的一个。条件是
n>0
(1%的病例为假)和
n<100
(10%的病例为假)。现在,如果你检查一下
n>0
首先,在1%的情况下,你可以避免检查另一个,但当你检查时
n<100
首先,在10%的情况下,你可以避免其他检查。所以,这就是你应该做的:
if (n == 100) { // get 10% of the cases out of the way
...
} else if (n == 0) { // unavoidable second check after first check failed
...
} else { // most frequent case needs both checks
...
}
(这假设[0…100]是唯一的值
n
可以接受。)