Skip to content

Commit ff56c15

Browse files
committed
specialize snprintf/abseil for float/double
1 parent 6d7573f commit ff56c15

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
@@ -192,7 +192,10 @@ int netlib(T d, std::span<char>& buffer) {
192192

193193
template<arithmetic_float T>
194194
int snprintf(T d, std::span<char>& buffer) {
195-
return std::snprintf(buffer.data(), buffer.size(), "%.17g", d);
195+
if constexpr (std::is_same_v<T, float>)
196+
return std::snprintf(buffer.data(), buffer.size(), "%.9g", d);
197+
else
198+
return std::snprintf(buffer.data(), buffer.size(), "%.17g", d);
196199
}
197200

198201
// grisu2 is hardcoded for double.
@@ -291,7 +294,10 @@ int abseil(T d, std::span<char>& buffer) {
291294
// absl::StrAppend(&s, d);
292295
// std::copy(s.begin(), s.end(), buffer.begin());
293296
// return size(s);
294-
return absl::SNPrintF(buffer.data(), buffer.size(), "%g", d);
297+
if constexpr (std::is_same_v<T, float>)
298+
return absl::SNPrintF(buffer.data(), buffer.size(), "%.9g", d);
299+
else
300+
return absl::SNPrintF(buffer.data(), buffer.size(), "%.17g", d);
295301
}
296302

297303
template<arithmetic_float T>
@@ -310,7 +316,6 @@ int std_to_chars(T d, std::span<char>& buffer) {
310316
#endif
311317
}
312318

313-
314319
template <arithmetic_float T>
315320
std::array<BenchArgs<T>, Benchmarks::COUNT> initArgs(bool errol = false) {
316321
std::array<BenchArgs<T>, Benchmarks::COUNT> args;

0 commit comments

Comments
 (0)