有没有理由为什么使用乘法而不是逻辑AND运算符是首选或不鼓励(使用任何编程语言)?下面的例子表明它可以使代码更简单,但是还有其他优点(或缺点)吗?
int x = 1;
int y = 0;
int z = 1;
int xyz_mult = x*y*z;
int xyz_and = ((x && y) && z);
以R:
中的简单示例为例library(rbenchmark)
library(Rcpp)
benchmark(T*F*T, (T&&F)&&T, replications = 1e6)
## test replications elapsed relative user.self sys.self user.child sys.child
## 2 (T && F) && T 1000000 2.974 1.000 2.965 0.004 0 0
## 1 T * F * T 1000000 3.201 1.076 3.187 0.008 0 0
和更快一点。但是使用Rcpp时,使用int
变量可以获得更快的乘法效果,而bool
变量可以(反直觉地)更快:
xyz_and_int <- cppFunction("
int foo() {
int x = 1;
int y = 0;
int z = 1;
return (x && y) && z;
}
")
xyz_mult_int <- cppFunction("
int foo() {
int x = 1;
int y = 0;
int z = 1;
return z*y*z;
}
")
xyz_and_bool <- cppFunction("
int foo() {
bool x = 1;
bool y = 0;
bool z = 1;
return (x && y) && z;
}
")
xyz_mult_bool <- cppFunction("
int foo() {
bool x = 1;
bool y = 0;
bool z = 1;
return z*y*z;
}
")
以下是模拟结果:
benchmark(xyz_and_int(), xyz_mult_int(), replications = 1e6)
test replications elapsed relative user.self sys.self user.child sys.child
## 1 xyz_and_int() 1000000 3.32 1.000 3.33 0 NA NA
## 2 xyz_mult_int() 1000000 3.34 1.006 3.33 0 NA NA
benchmark(xyz_and_bool(), xyz_mult_bool(), replications = 1e6)
test replications elapsed relative user.self sys.self user.child sys.child
## 1 xyz_and_bool() 1000000 3.36 1.015 3.34 0 NA NA
## 2 xyz_mult_bool() 1000000 3.31 1.000 3.31 0 NA NA
答案 0 :(得分:0)
如果我没有弄错的话,可以使用移位寄存器或某种加法器进行乘法运算。它们的实现总是比AND门更复杂,因此它们的效率更低&#34;。