WSJT-X/boost/libs/math/test/zztest_max_digits10.cpp

81 lines
2.4 KiB
C++

// Copyright 2010 Paul A. Bristow
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
/* Temporary test program to discover which platforms support
numeric_limits
digits10 and
new max_digits10.
This is needed to produce or select a macro to avoid compilation failure in Boost.Test
for platforms that do not include either or both of these.
BOOST_NO_CXX11_NUMERIC_LIMITS is tested here.
[Boost C++ Libraries]
#5758: Boost.Test Floating-point comparison diagnostic output does not support radix 10.
*/
#include <boost/config.hpp>
#include <boost/version.hpp>
#include <iostream>
#include <limits>
int main()
{
std::cout << "Platform: " << BOOST_PLATFORM << '\n'
<< "Compiler: " << BOOST_COMPILER << '\n'
<< "STL : " << BOOST_STDLIB << '\n'
<< "Boost : " << BOOST_VERSION/100000 << "."
<< BOOST_VERSION/100 % 1000 << "."
<< BOOST_VERSION % 100 << std::endl;
int digits10 = std::numeric_limits<double>::digits10;
std::cout << "std::numeric_limits<double>::digits10 = " << digits10 << std::endl;
#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
// OK to use C++11 max_digits10;
int max_digits10 = std::numeric_limits<double>::max_digits10;
std::cout << "std::numeric_limits<double>::max_digits10 = " << max_digits10 << std::endl;
#else
// No support for max_digits10; so use Kahan formula instead.
int max_digits10 = 2 + std::numeric_limits<double>::digits * 3010/10000;
std::cout << "2 + std::numeric_limits<double>::digits * 3010/10000; = " <<
2 + std::numeric_limits<double>::digits * 3010/10000;
#endif
} // int main()
/*
Output:
Description: Autorun "J:\Cpp\MathToolkit\test\Math_test\Debug\ztest_max_digits10.exe"
Platform: Win32
Compiler: Microsoft Visual C++ version 10.0
STL : Dinkumware standard library version 520
Boost : 1.50.0
std::numeric_limits<double>::digits10 = 15
std::numeric_limits<double>::max_digits10 = 17
1> Description: Autorun "J:\Cpp\Misc\Debug\zztest_max_digits10.exe"
1> Platform: Win32
1> Compiler: Microsoft Visual C++ version 12.0
1> STL : Dinkumware standard library version 610
1> Boost : 1.55.0
1> std::numeric_limits<double>::digits10 = 15
1> std::numeric_limits<double>::max_digits10 = 17
*/