Teuchos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
Teuchos_ScalarTraits.cpp
Go to the documentation of this file.
1// @HEADER
2// ***********************************************************************
3//
4// Teuchos: Common Tools Package
5// Copyright (2004) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38//
39// ***********************************************************************
40// @HEADER
41
43#include "Teuchos_Assert.hpp"
44#include <limits>
45
46// Define this to throw exceptions when any Teuchos::ScalarTraits function
47// encounters a NaN or an Inf.
48//#define TEUCHOS_SCALAR_TRAITS_THROW_NAN_INF_ERR
49
50#ifdef HAVE_TEUCHOSCORE_QUADMATH
51namespace std {
52
53std::ostream&
54operator<< (std::ostream& out, const __float128& x)
55{
56 const size_t bufSize = 128;
57 char buf[128];
58
59 const int numCharPrinted = quadmath_snprintf (buf, bufSize, "%.30Qe", x);
60 if (static_cast<size_t> (numCharPrinted) >= bufSize) {
61 std::ostringstream os;
62 os << "Failed to print __float128 value: buffer has " << bufSize
63 << " characters, but quadmath_snprintf wanted " << numCharPrinted
64 << " characters!";
65 throw std::runtime_error (os.str ());
66 }
67 out << buf;
68 return out;
69}
70
71istream&
72operator>> (std::istream& in, __float128& x)
73{
74 std::string tmpStr;
75 in >> tmpStr;
76 // FIXME (mfh 10 Sep 2015) I don't think this routine does any error
77 // checking.
78 x = strtoflt128 (tmpStr.c_str (), NULL);
79 return in;
80}
81
82} // namespace std
83#endif // HAVE_TEUCHOSCORE_QUADMATH
84
85void Teuchos::throwScalarTraitsNanInfError( const std::string &errMsg )
86{
87 (void)errMsg;
88#ifdef TEUCHOS_SCALAR_TRAITS_THROW_NAN_INF_ERR
89 TEUCHOS_TEST_FOR_EXCEPTION( true, std::runtime_error, errMsg );
90#endif
91}
92
93#ifdef HAVE_TEUCHOS_GNU_MP
94gmp_randclass Teuchos::gmp_rng ( gmp_randinit_default );
95#endif
96
97#ifdef HAVE_TEUCHOS_QD
98bool Teuchos::operator&&(const dd_real &a, const dd_real &b) {
99 return !a.is_zero() && !b.is_zero();
100}
101bool Teuchos::operator&&(const qd_real &a, const qd_real &b) {
102 return !a.is_zero() && !b.is_zero();
103}
104#endif
105
106#ifndef __sun
107// This is an intentional computation of NaN.
108namespace Teuchos {
109 const float flt_nan = std::numeric_limits<float>::quiet_NaN();
110 const double dbl_nan = std::numeric_limits<double>::quiet_NaN();
111}
112#endif
Defines basic traits for the scalar field type.
Concrete serial communicator subclass.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
const float flt_nan
const double dbl_nan
ostream & operator<<(ostream &os, const pair< Packet, Packet > &arg)
std::istream & operator>>(std::istream &in, CustomDataType &object)