summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKunoiSayami <[email protected]>2022-06-26 20:25:03 +0800
committerKunoiSayami <[email protected]>2022-06-26 20:25:03 +0800
commit79ce6a05c76962a900a20777a838892932aed81b (patch)
tree89e97f86711e3730545e3939fc977bdf2451a963
parent447d7d7a363b53b81cf21a30b6765d9e3501484c (diff)
feat(script): Finish experiment3
Signed-off-by: KunoiSayami <[email protected]>
-rw-r--r--exp_3.cpp44
-rw-r--r--main.cu2
2 files changed, 37 insertions, 9 deletions
diff --git a/exp_3.cpp b/exp_3.cpp
index 4e6f8b0..a1d55b9 100644
--- a/exp_3.cpp
+++ b/exp_3.cpp
@@ -1,10 +1,12 @@
#include <algorithm>
#include <cassert>
+#include <cmath>
#include <cstdio>
#include <set>
#include <vector>
constexpr size_t length = 1048576;
+constexpr size_t sample_length = 1000;
int main() {
@@ -22,7 +24,7 @@ int main() {
assert(vector1.size() == length);
auto it = vector1.begin();
- for (int i = 1; i <= 1000; i++) {
+ for (int i = 1; i <= sample_length; i++) {
auto element = *it;
auto ret = set2.insert(element);
if (ret.second) {
@@ -32,7 +34,7 @@ int main() {
it++;
}
- assert(vector2.size() == 1000);
+ assert(vector2.size() == sample_length);
auto it2 = set2.begin();
int cnt = 0;
@@ -42,13 +44,39 @@ int main() {
// printf("%d ", cnt);
}
- it2 = set1.begin();
+ auto it1 = set1.begin();
cnt = 0;
- for (long long it1 : set2) {
- while (it1 > *it2 && it2 != set1.end())
- it2++, cnt++;
- printf("%d ", cnt);
+ for (it2 = set2.begin(); it2 != set2.end(); it2++) {
+ while (*it2 > *it1 && it1 != set1.end())
+ it1++, cnt++;
+ // printf("%d ", cnt);
+ }
+
+ auto ita = set2.begin(), itb = set2.begin();
+ itb++;
+ long double dx = (*itb - *ita);
+ int cnt1 = 0, cnt2 = 0;
+ // for (auto it = set2.begin(); it != set2.end(); it++) printf("%lld ", *it);
+ // printf("\n");
+ long double e = 0;
+ for (auto iter = set1.begin(); iter != set1.end(); iter++, cnt1++) {
+ if (*iter <= *set2.begin()) {
+ e += fabs(0.0 - double(cnt1) / (length - 1));
+ printf("%.4lf ", 0.0);
+ continue;
+ }
+ while (itb != set2.end() && *iter > *itb)
+ ita++, itb++, dx = (*itb - *ita), cnt2++;
+ if (*itb == *set2.end()) {
+ e += fabs(1.0 - double(cnt1) / (length - 1));
+ printf("%.4lf ", 100.0);
+ continue;
+ }
+ // printf("%lld %lld %lld ", *ita, *it, *itb);
+ long double res = (cnt2 + (*iter - *ita) / dx) / (sample_length - 1);
+ e += std::abs(res - (long double)cnt1 / (length - 1));
+ printf("%.4Lf ", res * 100);
}
- puts("");
+ printf("\n%.4Lf", e);
return 0;
} \ No newline at end of file
diff --git a/main.cu b/main.cu
index c33a236..1d0cc4e 100644
--- a/main.cu
+++ b/main.cu
@@ -888,7 +888,7 @@ int main(int argc, char **argv) {
break;
fprintf(file, "%d\n", tmp[i]);
}
- printf("%d\n", i);
+ // printf("%d\n", i);
delete[] tmp;
fclose(file);
}