diff --git a/Applications/FileIO/Gmsh/GMSHInterface.cpp b/Applications/FileIO/Gmsh/GMSHInterface.cpp
index a7073724a4d86aa6892a5cb709f0ea9ac514a71c..54ba7864c75035e89ded9e6d8a1c6edd286d93d1 100644
--- a/Applications/FileIO/Gmsh/GMSHInterface.cpp
+++ b/Applications/FileIO/Gmsh/GMSHInterface.cpp
@@ -268,7 +268,7 @@ int GMSHInterface::writeGMSHInputFile(std::ostream& out)
     }
 
     std::stringstream error_messages;
-    error_messages.precision(std::numeric_limits<double>::digits10);
+    error_messages.precision(std::numeric_limits<double>::max_digits10);
     for (std::size_t k = 0; k < _gmsh_pnts.size(); ++k)
     {
         if (_gmsh_pnts[k] == nullptr)
diff --git a/Applications/FileIO/Gmsh/GMSHPolygonTree.cpp b/Applications/FileIO/Gmsh/GMSHPolygonTree.cpp
index e7e1883912240b405528ad1407da280e96987bb8..967fb003cb6de46a8309df0ec019156da81063c9 100644
--- a/Applications/FileIO/Gmsh/GMSHPolygonTree.cpp
+++ b/Applications/FileIO/Gmsh/GMSHPolygonTree.cpp
@@ -307,7 +307,7 @@ void GMSHPolygonTree::createGMSHPoints(std::vector<GMSHPoint*>& gmsh_pnts) const
 
     const std::size_t n_plys(_plys.size());
     std::stringstream error_messages;
-    error_messages.precision(std::numeric_limits<double>::digits10);
+    error_messages.precision(std::numeric_limits<double>::max_digits10);
     for (std::size_t k(0); k < n_plys; k++)
     {
         const std::size_t n_pnts_in_ply(_plys[k]->getNumberOfPoints());
diff --git a/Applications/FileIO/Legacy/OGSIOVer4.cpp b/Applications/FileIO/Legacy/OGSIOVer4.cpp
index f1f29379af810ce64839d10a60ca2c68289a1028..eaba9e019aec7bff9631340356f9f93b4098ebfb 100644
--- a/Applications/FileIO/Legacy/OGSIOVer4.cpp
+++ b/Applications/FileIO/Legacy/OGSIOVer4.cpp
@@ -670,7 +670,7 @@ void writeGLIFileV4(const std::string& fname,
              n_pnts, fname);
         os << "#POINTS"
            << "\n";
-        os.precision(std::numeric_limits<double>::digits10);
+        os.precision(std::numeric_limits<double>::max_digits10);
         for (std::size_t k(0); k < n_pnts; k++)
         {
             os << k << " " << *(pnts[k]);
@@ -738,7 +738,7 @@ void writeAllDataToGLIFileV4(const std::string& fname,
        << "\n";
     for (auto const& geo_name : geo_names)
     {
-        os.precision(std::numeric_limits<double>::digits10);
+        os.precision(std::numeric_limits<double>::max_digits10);
         GeoLib::PointVec const* const pnt_vec(geo.getPointVecObj(geo_name));
         if (pnt_vec)
         {
@@ -766,7 +766,7 @@ void writeAllDataToGLIFileV4(const std::string& fname,
     geo.getStationVectorNames(stn_names);
     for (auto& stn_name : stn_names)
     {
-        os.precision(std::numeric_limits<double>::digits10);
+        os.precision(std::numeric_limits<double>::max_digits10);
         const std::vector<GeoLib::Point*>* pnts(geo.getStationVec(stn_name));
         if (pnts)
         {
diff --git a/Applications/FileIO/TetGenInterface.cpp b/Applications/FileIO/TetGenInterface.cpp
index ea9b7c7f41915419e45fb89b7901c82bbc6ee1a5..9296012e981ca02d5ec0ed41e54888fbf19a3d82 100644
--- a/Applications/FileIO/TetGenInterface.cpp
+++ b/Applications/FileIO/TetGenInterface.cpp
@@ -630,7 +630,7 @@ bool TetGenInterface::writeTetGenSmesh(
     }
 
     std::ofstream out(file_name.c_str(), std::ios::out);
-    out.precision(std::numeric_limits<double>::digits10);
+    out.precision(std::numeric_limits<double>::max_digits10);
     // the points header
     const std::size_t nPoints(points->size());
     out << nPoints << " 3\n";
@@ -700,7 +700,7 @@ bool TetGenInterface::writeTetGenSmesh(
     const std::vector<MeshLib::Node*>& nodes = mesh.getNodes();
 
     std::ofstream out(file_name.c_str(), std::ios::out);
-    out.precision(std::numeric_limits<double>::digits10);
+    out.precision(std::numeric_limits<double>::max_digits10);
     // the points header
     const std::size_t nPoints(nodes.size());
     out << nPoints << " 3\n";
diff --git a/Applications/Utils/MeshEdit/queryMesh.cpp b/Applications/Utils/MeshEdit/queryMesh.cpp
index 0b38b294a63caf1a56e9801d39620f2cfdb97baf..fd713e8fe74b52b847d04e6e968859c0cd3adb8d 100644
--- a/Applications/Utils/MeshEdit/queryMesh.cpp
+++ b/Applications/Utils/MeshEdit/queryMesh.cpp
@@ -95,7 +95,7 @@ int main(int argc, char* argv[])
     {
         std::stringstream out;
         out << std::scientific
-            << std::setprecision(std::numeric_limits<double>::digits10);
+            << std::setprecision(std::numeric_limits<double>::max_digits10);
         out << "--------------------------------------------------------"
             << std::endl;
         auto* ele = mesh->getElement(ele_id);
@@ -133,7 +133,7 @@ int main(int argc, char* argv[])
     {
         std::stringstream out;
         out << std::scientific
-            << std::setprecision(std::numeric_limits<double>::digits10);
+            << std::setprecision(std::numeric_limits<double>::max_digits10);
         out << "--------------------------------------------------------"
             << std::endl;
         MeshLib::Node const* node = mesh->getNode(node_id);
diff --git a/Applications/Utils/ModelPreparation/ComputeNodeAreasFromSurfaceMesh.cpp b/Applications/Utils/ModelPreparation/ComputeNodeAreasFromSurfaceMesh.cpp
index b805da8084f8159e4e7096c268de122fcb232b1f..c29a8bc4bbf82d1f7c42efb6c041d08f63935835 100644
--- a/Applications/Utils/ModelPreparation/ComputeNodeAreasFromSurfaceMesh.cpp
+++ b/Applications/Utils/ModelPreparation/ComputeNodeAreasFromSurfaceMesh.cpp
@@ -45,8 +45,8 @@ static void writeToFile(
         OGS_FATAL("Unable to open the file '{:s}' - aborting.", csv_fname);
     }
 
-    ids_and_area_out.precision(std::numeric_limits<double>::digits10);
-    csv_out.precision(std::numeric_limits<double>::digits10);
+    ids_and_area_out.precision(std::numeric_limits<double>::max_digits10);
+    csv_out.precision(std::numeric_limits<double>::max_digits10);
 
     csv_out << "ID x y z area node_id\n";  // CSV header
     for (std::size_t k(0); k < ids_and_areas.size(); k++)
diff --git a/Applications/Utils/ModelPreparation/createNeumannBc.cpp b/Applications/Utils/ModelPreparation/createNeumannBc.cpp
index e2e479ffae35aeaf7b1a6a1db8899a299c1cefc6..7f108478b1f70e54b7fa99ae67114c4d8dea7e28 100644
--- a/Applications/Utils/ModelPreparation/createNeumannBc.cpp
+++ b/Applications/Utils/ModelPreparation/createNeumannBc.cpp
@@ -186,7 +186,7 @@ int main(int argc, char* argv[])
     MeshLib::IO::writeMeshToFile(*surface_mesh, result_file.getValue());
 
     std::ofstream result_out(result_file.getValue() + ".txt");
-    result_out.precision(std::numeric_limits<double>::digits10);
+    result_out.precision(std::numeric_limits<double>::max_digits10);
     for (auto const& p : direct_values)
     {
         result_out << p.first << " " << p.second << "\n";
diff --git a/BaseLib/IO/Writer.cpp b/BaseLib/IO/Writer.cpp
index 3296c6e5e2a70178210f2ed906596ddc07d3edb1..b220c2335cfb36d4e13c7f3b546d5ba1dea2d3d3 100644
--- a/BaseLib/IO/Writer.cpp
+++ b/BaseLib/IO/Writer.cpp
@@ -25,7 +25,7 @@ namespace IO
 {
 Writer::Writer()
 {
-    out.precision(std::numeric_limits<double>::digits10);
+    out.precision(std::numeric_limits<double>::max_digits10);
 }
 
 std::string Writer::writeToString()
diff --git a/ChemistryLib/PhreeqcIO.cpp b/ChemistryLib/PhreeqcIO.cpp
index d109707cf2bc6a02239df2f55b61894b283335d7..93118dd4c0fa13845d7bc668895cfc8715c76356 100644
--- a/ChemistryLib/PhreeqcIO.cpp
+++ b/ChemistryLib/PhreeqcIO.cpp
@@ -468,7 +468,7 @@ void PhreeqcIO::writeInputsToFile(double const dt)
     }
 
     out << std::scientific
-        << std::setprecision(std::numeric_limits<double>::digits10);
+        << std::setprecision(std::numeric_limits<double>::max_digits10);
     out << (*this << dt);
 
     if (!out)
diff --git a/GeoLib/AnalyticalGeometry.cpp b/GeoLib/AnalyticalGeometry.cpp
index 5adb8909c39cf1bed80b9e4b6c0e61cad3a14639..5dbd918e0cc43fe7b4012e92064205d055bfd0c4 100644
--- a/GeoLib/AnalyticalGeometry.cpp
+++ b/GeoLib/AnalyticalGeometry.cpp
@@ -519,7 +519,7 @@ std::vector<MathLib::Point3d> lineSegmentIntersect2d(
                 return {{c, d}};
             }
             std::stringstream err;
-            err.precision(std::numeric_limits<double>::digits10);
+            err.precision(std::numeric_limits<double>::max_digits10);
             err << ab << " x " << cd;
             OGS_FATAL(
                 "The case of parallel line segments ({:s}) is not handled yet. "
@@ -552,7 +552,7 @@ std::vector<MathLib::Point3d> lineSegmentIntersect2d(
             }
 
             std::stringstream err;
-            err.precision(std::numeric_limits<double>::digits10);
+            err.precision(std::numeric_limits<double>::max_digits10);
             err << ab << " x " << cd;
             OGS_FATAL(
                 "The case of parallel line segments ({:s}) is not handled yet. "
diff --git a/GeoLib/IO/AsciiRasterInterface.cpp b/GeoLib/IO/AsciiRasterInterface.cpp
index 9a5f2b6950359309f6c34c331958b5d0a572986e..1ca81a2526d9944e62abfe1b0cbc28ebf0628840 100644
--- a/GeoLib/IO/AsciiRasterInterface.cpp
+++ b/GeoLib/IO/AsciiRasterInterface.cpp
@@ -359,7 +359,7 @@ void AsciiRasterInterface::writeRasterAsASC(GeoLib::Raster const& raster,
     out << "ncols " << nCols << "\n";
     out << "nrows " << nRows << "\n";
     auto const default_precision = out.precision();
-    out.precision(std::numeric_limits<double>::digits10);
+    out.precision(std::numeric_limits<double>::max_digits10);
     out << "xllcorner " << origin[0] << "\n";
     out << "yllcorner " << origin[1] << "\n";
     out << "cellsize " << header.cell_size << "\n";
diff --git a/GeoLib/IO/TINInterface.cpp b/GeoLib/IO/TINInterface.cpp
index ecf1e9f8064bfd72175bb1a7a90e97de6945a753..1ff83a3d078c2827f66c96abeaf2824e60caeedc 100644
--- a/GeoLib/IO/TINInterface.cpp
+++ b/GeoLib/IO/TINInterface.cpp
@@ -168,7 +168,7 @@ void TINInterface::writeSurfaceAsTIN(GeoLib::Surface const& surface,
         WARN("writeSurfaceAsTIN(): could not open stream to {:s}.", file_name);
         return;
     }
-    os.precision(std::numeric_limits<double>::digits10);
+    os.precision(std::numeric_limits<double>::max_digits10);
     const std::size_t n_tris(surface.getNumberOfTriangles());
     for (std::size_t l(0); l < n_tris; l++)
     {
diff --git a/GeoLib/IO/XmlIO/Qt/XmlGmlInterface.cpp b/GeoLib/IO/XmlIO/Qt/XmlGmlInterface.cpp
index 3320b39bd9251a047da419bc44c7b4e576a6919b..762bb3c14c83d0a0eb439e0ee90476d4176d1db0 100644
--- a/GeoLib/IO/XmlIO/Qt/XmlGmlInterface.cpp
+++ b/GeoLib/IO/XmlIO/Qt/XmlGmlInterface.cpp
@@ -308,15 +308,15 @@ bool XmlGmlInterface::write()
                 pointTag.setAttribute(
                     "x",
                     QString::number((*points[i])[0], 'f',
-                                    std::numeric_limits<double>::digits10));
+                                    std::numeric_limits<double>::max_digits10));
                 pointTag.setAttribute(
                     "y",
                     QString::number((*points[i])[1], 'f',
-                                    std::numeric_limits<double>::digits10));
+                                    std::numeric_limits<double>::max_digits10));
                 pointTag.setAttribute(
                     "z",
                     QString::number((*points[i])[2], 'f',
-                                    std::numeric_limits<double>::digits10));
+                                    std::numeric_limits<double>::max_digits10));
 
                 std::string const& point_name(pnt_vec->getItemNameByID(i));
                 if (!point_name.empty())
diff --git a/GeoLib/IO/XmlIO/Qt/XmlStnInterface.cpp b/GeoLib/IO/XmlIO/Qt/XmlStnInterface.cpp
index 77c280633b0fa7d6107eeb8861d5c3a9e2d08a40..6bdc2c79aaeb238a5d7f122df4170345a737f98c 100644
--- a/GeoLib/IO/XmlIO/Qt/XmlStnInterface.cpp
+++ b/GeoLib/IO/XmlIO/Qt/XmlStnInterface.cpp
@@ -298,13 +298,13 @@ bool XmlStnInterface::write()
         stationTag.setAttribute("id", QString::number(i));
         stationTag.setAttribute(
             "x", QString::number((*(*stations)[i])[0], 'f',
-                                 std::numeric_limits<double>::digits10));
+                                 std::numeric_limits<double>::max_digits10));
         stationTag.setAttribute(
             "y", QString::number((*(*stations)[i])[1], 'f',
-                                 std::numeric_limits<double>::digits10));
+                                 std::numeric_limits<double>::max_digits10));
         stationTag.setAttribute(
             "z", QString::number((*(*stations)[i])[2], 'f',
-                                 std::numeric_limits<double>::digits10));
+                                 std::numeric_limits<double>::max_digits10));
         stationsTag.appendChild(stationTag);
 
         QDomElement stationNameTag = doc.createElement("name");
diff --git a/MeshGeoToolsLib/GeoMapper.cpp b/MeshGeoToolsLib/GeoMapper.cpp
index 27a7c864b38fcf1fcf19264e4a7a578770e90659..e2c8545ea20372445bc7cc448c9d89f8bfc564ec 100644
--- a/MeshGeoToolsLib/GeoMapper.cpp
+++ b/MeshGeoToolsLib/GeoMapper.cpp
@@ -508,7 +508,7 @@ static bool snapPointToElementNode(MathLib::Point3d& p,
         {
 #ifdef DEBUG_GEOMAPPER
             std::stringstream out;
-            out.precision(std::numeric_limits<double>::digits10);
+            out.precision(std::numeric_limits<double>::max_digits10);
             out << "Segment point snapped from " << p;
 #endif
             p = node;
diff --git a/MeshLib/IO/VtkIO/PVDFile.cpp b/MeshLib/IO/VtkIO/PVDFile.cpp
index 5a9d31ae3b3de857b70293321bf669b0b7d1fab4..7e1cb002daf98438e5b12bd7e9e2abbca91fa75e 100644
--- a/MeshLib/IO/VtkIO/PVDFile.cpp
+++ b/MeshLib/IO/VtkIO/PVDFile.cpp
@@ -51,7 +51,7 @@ void PVDFile::addVTUFile(const std::string& vtu_fname, double timestep)
         OGS_FATAL("could not open file `{:s}'", pvd_filename);
     }
 
-    fh << std::setprecision(std::numeric_limits<double>::digits10);
+    fh << std::setprecision(std::numeric_limits<double>::max_digits10);
 
     fh << "<?xml version=\"1.0\"?>\n"
           "<VTKFile type=\"Collection\" version=\"0.1\" "
diff --git a/MeshLib/IO/XDMF/writeXdmf.cpp b/MeshLib/IO/XDMF/writeXdmf.cpp
index 18e64a89a48e41088a1e569700425e3b8e140fa3..c1b1bed1815749db3ad09ef50f3ac5e1571d5577 100644
--- a/MeshLib/IO/XDMF/writeXdmf.cpp
+++ b/MeshLib/IO/XDMF/writeXdmf.cpp
@@ -216,19 +216,21 @@ std::function<std::string(std::vector<double>)> write_xdmf(
         [](double const& time_value, auto const& geometry, auto const& topology,
            auto const& constant_attributes, auto const& variable_attributes)
     {
-        // Output of "Time Value" with sufficient precision.
-        static_assert(15 == std::numeric_limits<double>::digits10);
         return fmt::format(
             R"(
 <Grid Name="Grid" GridType="Uniform">
-    <Time Value="{time_value:.15g}"/>
+    <Time Value="{time_value:.{precision}g}"/>
 {geometry}
 {topology}
 {fix_attributes}
 {variable_attributes}
 </Grid>)",
-            "time_value"_a = time_value, "geometry"_a = geometry,
-            "topology"_a = topology, "fix_attributes"_a = constant_attributes,
+            "time_value"_a = time_value,
+            // Output of "Time Value" with sufficient precision.
+            "precision"_a = std::numeric_limits<double>::max_digits10,
+            "geometry"_a = geometry,
+            "topology"_a = topology,
+            "fix_attributes"_a = constant_attributes,
             "variable_attributes"_a = variable_attributes);
     };
 
diff --git a/ProcessLib/Assembly/MatrixOutput.cpp b/ProcessLib/Assembly/MatrixOutput.cpp
index 5aabd69dc9fbcd58d0f91cf610be0812063b88e2..a029bde37cf9656909e8d10d3e6ac68770d2a953 100644
--- a/ProcessLib/Assembly/MatrixOutput.cpp
+++ b/ProcessLib/Assembly/MatrixOutput.cpp
@@ -33,15 +33,19 @@ std::string getSeparatorAfterFilenamePrefix(std::string const& filenamePrefix)
 #ifndef USE_PETSC
 static void outputGlobalMatrix(GlobalMatrix const& mat, std::ostream& os)
 {
-    os << std::setprecision(16) << "(" << mat.getNumberOfRows() << " x "
-       << mat.getNumberOfColumns() << ")\n";
+    auto const precision = os.precision();
+    os << std::setprecision(std::numeric_limits<double>::max_digits10) << "("
+       << mat.getNumberOfRows() << " x " << mat.getNumberOfColumns() << ")\n"
+       << std::setprecision(precision);
     mat.write(os);
 }
 
 static void outputGlobalVector(GlobalVector const& vec, std::ostream& os)
 {
-    os << std::setprecision(16) << "(" << vec.size() << ")\n";
-    os << vec.getRawVector() << '\n';
+    auto const precision = os.precision();
+    os << std::setprecision(std::numeric_limits<double>::max_digits10) << "("
+       << vec.size() << ")\n";
+    os << vec.getRawVector() << '\n' << std::setprecision(precision);
 }
 
 std::ofstream openGlobalMatrixOutputFile(std::string const& filenamePrefix,
@@ -326,8 +330,9 @@ void LocalMatrixOutput::operator()(double const t, int const process_id,
 
     DBUG("Writing to local matrix debug output file...");
 
-    fmt::print(fh, "## t = {:.15g}, process id = {}, element id = {}\n\n", t,
-               process_id, element_id);
+    fmt::print(fh, "## t = {:.{}g}, process id = {}, element id = {}\n\n", t,
+               std::numeric_limits<double>::max_digits10, process_id,
+               element_id);
 
     if (!local_M_data.empty())
     {
@@ -364,8 +369,9 @@ void LocalMatrixOutput::operator()(double const t, int const process_id,
 
     DBUG("Writing to local matrix debug output file...");
 
-    fmt::print(fh, "## t = {:.15g}, process id = {}, element id = {}\n\n", t,
-               process_id, element_id);
+    fmt::print(fh, "## t = {:.{}g}, process id = {}, element id = {}\n\n", t,
+               std::numeric_limits<double>::max_digits10, process_id,
+               element_id);
 
     if (!local_b_data.empty())
     {
diff --git a/ProcessLib/CompareJacobiansJacobianAssembler.h b/ProcessLib/CompareJacobiansJacobianAssembler.h
index 8b7fcd3132854a4731ded68c040b5299b2f2191c..711bf5231c15bf6dd01f8000dc1b3d921a01d84b 100644
--- a/ProcessLib/CompareJacobiansJacobianAssembler.h
+++ b/ProcessLib/CompareJacobiansJacobianAssembler.h
@@ -45,7 +45,7 @@ public:
           _fail_on_error(fail_on_error),
           _log_file(log_file_path)
     {
-        _log_file.precision(std::numeric_limits<double>::digits10);
+        _log_file.precision(std::numeric_limits<double>::max_digits10);
         _log_file << "#!/usr/bin/env python\n"
                      "import numpy as np\n"
                      "from numpy import nan\n"
diff --git a/Tests/MaterialLib/TestMPLAverageMolarMass.cpp b/Tests/MaterialLib/TestMPLAverageMolarMass.cpp
index ec83a037248d343e2dced2f8bc24ebab7e7d3388..95738e378dcec6e0c11c3f6a3cf8eb0ec860966c 100644
--- a/Tests/MaterialLib/TestMPLAverageMolarMass.cpp
+++ b/Tests/MaterialLib/TestMPLAverageMolarMass.cpp
@@ -84,7 +84,7 @@ TEST(MaterialPropertyLib, AverageMolarMass)
 
         m_composition << "<value>"
                       << std::setprecision(
-                             std::numeric_limits<double>::digits10)
+                             std::numeric_limits<double>::max_digits10)
                       << ref_molar_fraction_A[idx] << " "
                       << 1. - ref_molar_fraction_A[idx] << "</value>\n";
         std::stringstream m;
diff --git a/Tests/MathLib/TestNonlinear1D.cpp b/Tests/MathLib/TestNonlinear1D.cpp
index 78f64384fec3528175e7914cf2b4d199b70dc743..79e4068560bea9880b3a337f4ff9100d7e738b84 100644
--- a/Tests/MathLib/TestNonlinear1D.cpp
+++ b/Tests/MathLib/TestNonlinear1D.cpp
@@ -37,7 +37,11 @@ TYPED_TEST(MathLibRegulaFalsi, QuadraticFunction)
     auto rf = NL::makeRegulaFalsi<TypeParam>(f, -0.1, 1.1);
     double old_range = rf.getRange();
 
-    DBUG(" 0 -- x ~ {:23.16g}, range = {:23.16g}", rf.getResult(), old_range);
+    auto format_double =
+        [p = std::numeric_limits<double>::max_digits10](double const value)
+    { return fmt::format("{:23.{}g}", value, p); };
+    DBUG(" 0 -- x ~ {}, range = {}", format_double(rf.getResult()),
+         format_double(old_range));
 
     for (unsigned n = 0; n < 10; ++n)
     {
@@ -46,8 +50,8 @@ TYPED_TEST(MathLibRegulaFalsi, QuadraticFunction)
         // expect that the interval of the root search shrinks
         EXPECT_GT(old_range, range);
         old_range = range;
-        DBUG("{:2d} -- x ~ {:23.16g}, range = {:23.16g}", n + 1, rf.getResult(),
-             range);
+        DBUG("{:2d} -- x ~ {}, range = {}", n + 1,
+             format_double(rf.getResult()), format_double(range));
 
         if (range < std::numeric_limits<double>::epsilon())
         {
diff --git a/Tests/xdmfdiff/xdmfdiff.cpp b/Tests/xdmfdiff/xdmfdiff.cpp
index 72240b645129f9b609aec89be69196d1e043de16..c96e8c77638d998eefb1bdd6cebde6bae99dd0e0 100644
--- a/Tests/xdmfdiff/xdmfdiff.cpp
+++ b/Tests/xdmfdiff/xdmfdiff.cpp
@@ -246,7 +246,7 @@ bool compareValues(std::vector<double> const& points_a,
 
 int main(int argc, char* argv[])
 {
-    auto const digits10 = std::numeric_limits<double>::digits10;
+    auto const digits10 = std::numeric_limits<double>::max_digits10;
     auto const args = parseCommandLine(argc, argv);
 
     // Setup the standard output and error stream numerical formats.