[](double x) -> double { return -pow(x,4) + 7*pow(x,3) - 9*pow(x,2) - 7*x + 5; }; double now = -1.40; utility::mytm.CodeStart(); double start_time = utility::mytm.elapsed(); while( utility::mytm.elapsed() <= TIME_LIMIT ) { double dx = (0.5 - rand_double()) / 3; if( prob(f(now+dx), f(now), start_time) > rand_double() ) { now += dx; } } cout << now << " : " << f(now) << endl; return 0; } 実際のソースコード