#include #include #include #include #include #include #include #include std::vector DATA; void setup_data(double avg, double sigma, size_t count) { const int seed = 0; // 再現性のため固定 std::mt19937 rand_src(seed); std::normal_distribution<> nd(avg, sigma); DATA.clear(); double cur = 1.0; for (size_t i=0;i &data, double cdf_target) { size_t max = data.size(); size_t idx = static_cast( std::floor((max-1) * cdf_target ) ); if (idx == (max-1)) { return data[idx]; } double p = data[idx]; double n = data[idx+1]; double ip_range = 1.0 / (max-1); double frac = cdf_target - (static_cast(idx)/(max-1)); return (p*(ip_range-frac)+n*frac)/ip_range; // 線形補間 } void print_stat(int interval) { std::vector work_data; size_t max = DATA.size() - interval; double sum = 0.0; double sum_sq = 0.0; for (size_t i=0; i