Skip to content

Commit 4ba0ba2

Browse files
committed
specialize snprintf/abseil for float/double
1 parent 7d0ab1e commit 4ba0ba2

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

benchmarks/algorithms.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,10 @@ int netlib(T d, std::span<char>& buffer) {
168168

169169
template<arithmetic_float T>
170170
int snprintf(T d, std::span<char>& buffer) {
171-
return std::snprintf(buffer.data(), buffer.size(), "%.17g", d);
171+
if constexpr (std::is_same_v<T, float>)
172+
return std::snprintf(buffer.data(), buffer.size(), "%.9g", d);
173+
else
174+
return std::snprintf(buffer.data(), buffer.size(), "%.17g", d);
172175
}
173176

174177
// grisu2 is hardcoded for double.
@@ -267,7 +270,10 @@ int abseil(T d, std::span<char>& buffer) {
267270
// absl::StrAppend(&s, d);
268271
// std::copy(s.begin(), s.end(), buffer.begin());
269272
// return size(s);
270-
return absl::SNPrintF(buffer.data(), buffer.size(), "%g", d);
273+
if constexpr (std::is_same_v<T, float>)
274+
return absl::SNPrintF(buffer.data(), buffer.size(), "%.9g", d);
275+
else
276+
return absl::SNPrintF(buffer.data(), buffer.size(), "%.17g", d);
271277
}
272278

273279
template<arithmetic_float T>
@@ -286,7 +292,6 @@ int std_to_chars(T d, std::span<char>& buffer) {
286292
#endif
287293
}
288294

289-
290295
template <arithmetic_float T>
291296
std::array<BenchArgs<T>, Benchmarks::COUNT> initArgs(bool errol = false) {
292297
std::array<BenchArgs<T>, Benchmarks::COUNT> args;

0 commit comments

Comments
 (0)