微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

特定的 C++ 代码部分增加了代码执行时间

如何解决特定的 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 举报,一经查实,本站将立刻删除。