C++ 我不知道';我不明白为什么我的代码不';它不工作,运行时间更长

C++ 我不知道';我不明白为什么我的代码不';它不工作,运行时间更长,c++,C++,这是我的robbinsmonro.hpp: #include <utility> #ifndef ROBBINS_HPP #define ROBBINS_HPP template <class Func, class DetermSeq, class RandomV, class RNG> std::pair<double,double> robbins_monro( const Func & h, double x_init, do

这是我的robbinsmonro.hpp:

#include <utility>

#ifndef ROBBINS_HPP
#define ROBBINS_HPP


template <class Func, class DetermSeq, class RandomV, class RNG> 
std::pair<double,double> robbins_monro( const Func & h, double x_init, 
    double alpha, const DetermSeq & epsilon,RandomV & U, RNG & G, 
    long unsigned N)
{
    for(unsigned i=0; i<N; i++) 
    {
        x_init = x_init - epsilon(i+1)*(h(x_init) - alpha + U(G));
    }
    return std::make_pair(x_init, h(x_init));
}

#endif
#包括
#ifndef ROBBINS_水电站
#定义ROBBINS_水电站
模板
标准::配对robbins_monro(常数Func&h,双x_init,
双阿尔法,常数确定Q和ε,随机V和U,RNG和G,
长无符号(N)
{

对于(unsigned i=0;i,正如我在评论中所说,每个程序中N的值是不同的,这似乎解决了这个问题

如果您使用的是c++14或更新版本,则可以通过使用数字分隔符编写长数字来轻松避免这种情况-您可以选择在数字中的任意位置放置一个引号,以帮助可读性

e、 g

int N=1'000'000 及

整数N=100'000
非常明显不同。

请花时间编辑此问题,使代码可读。否则,您不太可能得到很多答案。我尝试过,但他们要求我做更多的评论,因为我的邮件中有很多代码。我尝试引用代码,但不起作用。编辑:I是doneWell我们设法做到了我能看出他们有不同的N,不确定还有什么不同的谢谢,就是这样!你是个天才!
#include "robbinsmonro.hpp"
#include <ctime>
#include <random>
#include <cmath>
#include <iostream>


int main() {
    auto f = [](double x) {return 1./(1.+exp(-x));};
    std::mt19937 G(time(nullptr));
    double alpha = 2./3.;
    auto epsilon = [](long unsigned N) { return 1./(N+1.);};
    std::uniform_real_distribution<double> U(-0.1,0.1);
    long unsigned N = 1000000;
    double variance=0.;
    double esperance=0.;
    int K = 100;    
    std::pair<double,double> y = std::make_pair(0,0);   
    for(int i=0; i<K; i++) {
        y = robbins_monro(f,0.,alpha,epsilon,U,G,N);
        variance += std::get<0>(y)*std::get<0>(y);
        esperance += std::get<0>(y);
    }
    variance /= double(K);
    esperance /= double(K);
    std::cout << "La variance empirique pour N=1000000 est de " << variance - esperance*esperance << std::endl;
return 0;
}
#include <random>
#include <iostream>
#include "robbinsmonro.hpp"

int main() {
    auto h=[](double x) { return 1./(1.+exp(-x)); };
    double alpha=2./3.;
    auto epsilon=[](long unsigned n) { return 1./(n+1.);};
    std::uniform_real_distribution<double> U(-0.1,0.1);
    std::mt19937 G(time(nullptr));
    std::pair<double,double> p;
    long unsigned N;
    double m;
    double v;
    int K=100;
    
    N=100000;
    m=0.;
    v=0.;
    for (int i = 0; i < K; i++)
    {
        p=robbins_monro(h,0.,alpha,epsilon,U,G,N);
        m += p.first;
        v += p.first*p.first;
    }
    return 0;
}
int N=1'000'000 int N=100'000