据说模运算符“%”和除法运算符“/”在嵌入式 C++ 中效率很低。
我怎样才能实现以下表达式:
a = b % c;
我知道这可以通过以下逻辑实现:
a = b - c;
while (a >= c) {
a = a - c;
}
但我的问题是,与 % 运算符相比,这段涉及 while 循环的代码是否足够高效?
谢谢, 基尔提
最佳答案
除法和取模确实是代价高昂的硬件操作,无论您做什么(这更多地与硬件架构相关,而不是与语言或编译器相关),可能比加法慢十倍。
但是,在当前的笔记本电脑或服务器以及高端微 Controller 上,cache未命中通常比除法慢得多!
当除数是常量时,GCC 编译器通常能够优化它们。
您的简单循环通常比使用硬件除法指令(或执行此操作的库例程,如果硬件未提供)慢得多。我相信您避免除法并将其替换为循环是错误的。
您可能会调整您的算法 - 例如通过二次幂 - 但我不建议使用您的代码。请记住,过早的优化是邪恶的,所以首先尝试让您的程序正确,然后分析它以找到问题点。
关于c++ - 在 C++ 中使用 % 运算符和/运算符的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8132188/