| [/ |
| Boost.Optional |
| |
| Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal |
| |
| 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) |
| ] |
| |
| [section bounds<> traits class] |
| |
| [section Introduction] |
| |
| To determine the ranges of numeric types with `std::numeric_limits` \[18.2.1\], |
| different syntax have to be used depending on numeric type. Specifically, |
| `numeric_limits<T>::min()` for integral types returns the minimum finite value, |
| whereas for floating point types it returns the minimum positive normalized |
| value. The difference in semantics makes client code unnecessarily complex |
| and error prone. |
| |
| `boost::numeric::bounds<>` provides a consistent interface for retrieving the |
| maximum finite value, the minimum finite value and the minimum positive normalized |
| value (0 for integral types) for numeric types. The selection of implementation |
| is performed at compile time, so there is no runtime overhead. |
| |
| [endsect] |
| |
| [section traits class bounds<N>] |
| |
| template<class N> |
| struct bounds |
| { |
| static N lowest () { return implementation_defined; } |
| static N highest () { return implementation_defined; } |
| static N smallest() { return implementation_defined; } |
| }; |
| |
| [heading Members] |
| |
| |
| [: `lowest()` ] |
| |
| Returns the minimum finite value, equivalent to `numeric_limits<T>::min()` when `T` |
| is an integral type, and to `-numeric_limits<T>::max()` when `T` is a floating point type. |
| |
| [: `highest()` ] |
| |
| Returns the maximum finite value, equivalent to `numeric_limits<T>::max()`. |
| |
| [: `smallest()` ] |
| |
| Returns the smallest positive normalized value for floating point types with |
| denormalization, or returns 0 for integral types. |
| |
| [endsect] |
| |
| [section Examples] |
| |
| The following example demonstrates the use of `numeric::bounds<>` and the |
| equivalent code using `numeric_limits`: |
| |
| #include <iostream> |
| |
| #include <boost/numeric/conversion/bounds.hpp> |
| #include <boost/limits.hpp> |
| |
| int main() { |
| |
| std::cout << "numeric::bounds versus numeric_limits example.\n"; |
| |
| std::cout << "The maximum value for float:\n"; |
| std::cout << boost::numeric::bounds<float>::highest() << "\n"; |
| std::cout << std::numeric_limits<float>::max() << "\n"; |
| |
| std::cout << "The minimum value for float:\n"; |
| std::cout << boost::numeric::bounds<float>::lowest() << "\n"; |
| std::cout << -std::numeric_limits<float>::max() << "\n"; |
| |
| std::cout << "The smallest positive value for float:\n"; |
| std::cout << boost::numeric::bounds<float>::smallest() << "\n"; |
| std::cout << std::numeric_limits<float>::min() << "\n"; |
| |
| return 0; |
| } |
| |
| |
| [endsect] |
| |
| [endsect] |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |