Skip to content

Commit dcd10be

Browse files
committed
comparison between our to_chars and dragonbox's
1 parent ff76a9d commit dcd10be

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

benchmarks/benchmark.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,37 @@ void process(const std::vector<TestCase<T>> &lines,
4747
const std::array<BenchArgs<T>, Benchmarks::COUNT> &args,
4848
const std::vector<std::string> &algo_filter) {
4949
// We have a special algorithm for the string generation:
50-
if (const std::string just_string = "just_string";
51-
!algo_filtered_out(just_string, algo_filter)) {
50+
if (!algo_filtered_out("just_string", algo_filter)) {
5251
std::vector<diy_float_t> parsed;
5352
for(const auto d : lines) {
5453
const auto v = jkj::grisu_exact(d.value);
5554
parsed.emplace_back(v.significand, v.exponent, v.is_negative);
5655
}
57-
pretty_print(parsed, just_string, [](const std::vector<diy_float_t>& parsed) -> int {
56+
pretty_print(parsed, "just_string_ours", [](const std::vector<diy_float_t>& parsed) -> int {
5857
int volume = 0;
5958
char buf[100];
6059
std::span<char> bufspan(buf, sizeof(buf));
6160
for (const auto v : parsed)
6261
volume += to_chars(v.significand, v.exponent, v.is_negative, bufspan.data());
6362
return volume;
6463
}, 100);
64+
pretty_print(parsed, "just_string_dragonbox", [](const std::vector<diy_float_t>& parsed) -> int {
65+
using traits = jkj::dragonbox::default_float_traits<T>;
66+
using carrier_uint = typename traits::carrier_uint;
67+
int volume = 0;
68+
char buf[100];
69+
std::span<char> bufspan(buf, sizeof(buf));
70+
for (const auto v : parsed) {
71+
char* ptr = bufspan.data();
72+
if(v.is_negative) *ptr++ = '-';
73+
const char* end = jkj::dragonbox::to_chars_detail::to_chars<T, traits>(
74+
static_cast<carrier_uint>(v.significand), v.exponent, ptr);
75+
volume += end - bufspan.data();
76+
}
77+
return volume;
78+
}, 100);
6579
} else {
66-
fmt::println("# skipping {}", just_string);
80+
fmt::println("# skipping just_string");
6781
}
6882

6983
for (const auto &algo : args) {

0 commit comments

Comments
 (0)