!fn1() && !fn2() does not have the same semantics as !fn1() & !fn2(). In
!fn1() & !fn2() both function calls are evaluated. In !fn1() && !fn2(),
if !fn1() returns false then !fn2() is not evaluated. I haven't studied
the particular instances of fn2(), though, to know whether it makes a
difference.
One could instead do something like:
x = fn1();
y = fn2();
if (!x && !y) ...
It would certainly be clearer, but more verbose.
julia
--