如何解决特定的 C++ 代码部分增加了代码执行时间
#include <iostream>
#include <Eigen/Dense>
#include <math.h>
double logarithmic_hysteretic_quantizer(double u,double u_prev,double delta,double u_min);
int main(int argc,const char * argv[]) {
Eigen::MatrixXd control_signal = Eigen::MatrixXd::Zero(7,1);
double delta = 0.1765;
double u_min = 0.01;
double i = 0.0;
while (i >= -20.0) {
std::cout << "FOR LOOP" << std::endl;
control_signal << logarithmic_hysteretic_quantizer(i,control_signal(0,0),delta,u_min),logarithmic_hysteretic_quantizer(i,control_signal(1,control_signal(2,control_signal(3,control_signal(4,control_signal(5,control_signal(6,u_min);
std::cout << control_signal << std::endl;
std::cout << std::endl;
i = i - 0.001;
}
return 0;
}
double logarithmic_hysteretic_quantizer(double u,double u_min)
{
double u_i = 0.0;
double u_i_next = 0.0;
double p = (1.0-delta)/(1.0+delta);
/* For Debugging Purposes */
std::cout << "INSIDE" << std::endl;
std::cout << "U is: " << u << std::endl;
std::cout << "U_PREV is: " << u_prev << std::endl;
if (u < 0.0) {
return -logarithmic_hysteretic_quantizer(-u,u_prev,u_min);
} else if (((u >= 0.0) && (u <= u_min/(1.0+delta))) || ((u < u_min) && (u > u_min/(1.0+delta)))) {
std::cout << "DEAD ZONE" << std::endl;
double w = 0.0;
return w;
} else {
int i = 1;
while(1) {
u_i = pow(p,(1-i))*u_min;
u_i_next = pow(p,(1-(i+1)))*u_min;
if ( ((u > u_i/(1.0+delta)) && (u <= u_i) && (u_prev >= u_i)) || ((u < u_i/(1.0-delta)) && (u_i <= u) && (u_prev <= u_i)) ) {
return u_i;
} else if ( ((u_i < u) && (u <= u_i/(1.0-delta)) && (u_prev >= u_i*(1.0+delta))) || ((u_i/(1.0-delta) <= u) && (u <= u_i_next) && (u_prev <= u_i*(1+delta))) ) {
return u_i*(1.0+delta);
}
i++;
}
}
}
我面临以下问题。当 else if
语句(用于 DEAD ZONE
的语句)被执行多次直到值离开死区时,代码在开始时执行有点慢,而当此 else if
语句没有执行很多次(例如,当 i = i - 1.0
而不是 i = i - 0.001
时)代码是在眨眼间执行的。我尝试在本节中使用断点来检查特定指令是否需要一些时间,但情况似乎并非如此。分析代码还让我大致了解 logarithmic_hysteretic_quantizer()
函数需要多长时间,但这并不能真正帮助我理解发生了什么。任何人都可以让我了解代码的这一部分发生了什么?
P.S.:我在 Xcode 12.4 上运行代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。