diff options
| author | KunoiSayami <[email protected]> | 2022-07-11 16:38:20 +0800 |
|---|---|---|
| committer | KunoiSayami <[email protected]> | 2022-07-11 16:38:20 +0800 |
| commit | f501587105cdfd823d43129f63e419a442871b65 (patch) | |
| tree | 6538cf2bd1ec5f847870cb175445c891dfce6c1d /exp_0702.cpp | |
| parent | 2c98458e2aa69e2af73e5536b46f5018dc402111 (diff) | |
feat(script): Add graphical output
Signed-off-by: KunoiSayami <[email protected]>
Diffstat (limited to 'exp_0702.cpp')
| -rw-r--r-- | exp_0702.cpp | 61 |
1 files changed, 35 insertions, 26 deletions
diff --git a/exp_0702.cpp b/exp_0702.cpp index b848b67..eca70ad 100644 --- a/exp_0702.cpp +++ b/exp_0702.cpp @@ -2,13 +2,14 @@ #include <cassert> #include <cmath> #include <cstdio> +#include <iostream> #include <numeric> +#include <string> #include <vector> constexpr size_t length = 1048576; -constexpr size_t sample_length = 1024; -constexpr long double slice_size = 1.0 / sample_length; -std::vector<unsigned long long> population_vector, sample_vector; +std::vector<unsigned long long> population_vector, sample_vector, + original_vector; std::vector<std::vector<unsigned long long>> result_storage; long double sample_cdf(long double x) { @@ -30,7 +31,7 @@ inline long double safe_ceil(long double value) { return c == 0 ? 1 : c; } -long double calc_stddev() { +long double calc_stddev(const long sample_length) { std::vector<size_t> elements; std::vector<long double> tmp_vector; for (auto &element : result_storage) { @@ -40,9 +41,9 @@ long double calc_stddev() { // auto sum = std::accumulate(elements.begin(), // elements.end(),decltype(elements)::value_type(0)); size_t sum = length; // printf("\nsum: %ld\n", sum); - // auto mu = sum / (long double)elements.size(); - long double mu = sample_length; - // printf("mu: %Lf\n", mu); + auto mu = length / (long double)elements.size(); + // long double mu = sample_length; + // printf("mu: %Lf\n", mu); std::transform(elements.begin(), elements.end(), tmp_vector.begin(), [&mu](size_t element) { return std::pow(element - mu, 2); }); @@ -52,30 +53,15 @@ long double calc_stddev() { elements.size()); } -int main() { - assert((length & 1) == 0); - assert(length > 1024); - - FILE *file = fopen("normal_distribution.txt", "r"); - assert(file); - for (long long i; fscanf(file, "%lld ", &i) != EOF; - population_vector.push_back(i)) - ; - fclose(file); - - assert(population_vector.size() == length); - - std::vector<unsigned long long> original_vector(population_vector); - +void mian(const long sample_length, const long split_size) { sample_vector = std::vector<unsigned long long>( - population_vector.begin(), population_vector.begin() + sample_length); - + original_vector.begin(), original_vector.begin() + sample_length); result_storage.resize(sample_length, std::vector<unsigned long long>()); - std::sort(population_vector.begin(), population_vector.end()); sample_vector.push_back(population_vector[0]); sample_vector.push_back(*(population_vector.cend() - 1)); std::sort(sample_vector.begin(), sample_vector.end()); + const auto slice_size = 1.0 / (long double)split_size; for (auto &element : original_vector) { result_storage[(int)safe_ceil(sample_cdf(element) / slice_size) - 1] @@ -88,5 +74,28 @@ int main() { for (const auto &element : result_storage) { printf("%ld ", element.size()); } - printf("%Lf\n", calc_stddev()); + printf("\n%Lf\n", calc_stddev(sample_length)); + result_storage.clear(); +} + +int main(int argc, char const *argv[]) { + assert((length & 1) == 0); + assert(length > 1024); + + FILE *file = fopen("normal_distribution.txt", "r"); + assert(file); + for (long long i; fscanf(file, "%lld ", &i) != EOF; + population_vector.push_back(i)) + ; + fclose(file); + + assert(population_vector.size() == length); + + original_vector = population_vector; + + std::sort(population_vector.begin(), population_vector.end()); + auto sample_length = 0, split_size = 0; + while (std::cin >> sample_length >> split_size) { + mian(sample_length, split_size); + } }
\ No newline at end of file |
