| [library Boost.NumericConversion |
| [quickbook 1.4] |
| [authors [Cacciola Carballal, Fernando Luis]] |
| [copyright 2004-2007 Fernando Luis Cacciola Carballal] |
| [category numerics] |
| [id numeric_conversion] |
| [dirname numeric_conversion] |
| [purpose |
| Optimized Policy-based Numeric Conversions |
| ] |
| [source-mode c++] |
| [license |
| 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]) |
| ] |
| ] |
| |
| [/ Macros will be used for links so we have a central place to change them ] |
| |
| |
| [/ Cited Boost resources ] |
| |
| [def __MPL_INTEGRAL_CONSTANT__ [@../../../../mpl/doc/refmanual/integral-constant.html MPL's Integral Constant] ] |
| |
| |
| |
| [/ Other web resources ] |
| |
| [def __SGI_UNARY_FUNCTION__ [@http://www.sgi.com/tech/stl/UnaryFunction.html Unary Function Object]] |
| |
| [/ Icons ] |
| |
| [def __NOTE__ [$images/note.png]] |
| [def __ALERT__ [$images/caution.png]] |
| [def __DETAIL__ [$images/note.png]] |
| [def __TIP__ [$images/tip.png]] |
| [def __QUESTION_MARK__ [$images/question.png]] |
| [def __SPACE__ [$images/space.png]] |
| [def __GO_TO__ [$images/callouts/R.png]] |
| |
| |
| |
| |
| [section Overview] |
| |
| The Boost Numeric Conversion library is a collection of tools to describe and |
| perform conversions between values of different |
| [link boost_numericconversion.definitions.numeric_types numeric types]. |
| |
| The library includes a special alternative for a subset of `std::numeric_limits<>`, |
| the [link boost_numericconversion.bounds___traits_class bounds<>] traits class, which provides |
| a consistent way to obtain the [link boost_numericconversion.definitions.range_and_precision boundary] |
| values for the [link boost_numericconversion.definitions.range_and_precision range] of a numeric type. |
| |
| It also includes a set of [link boost_numericconversion.conversion_traits___traits_class trait classes] |
| which describes the compile-time |
| properties of a conversion from a source to a target numeric type. |
| Both [link boost_numericconversion.definitions.c___arithmetic_types arithmetic] and |
| [link boost_numericconversion.definitions.numeric_types user-defined numeric types] can be used. |
| |
| A policy-based [link boost_numericconversion.converter___function_object converter] object which |
| uses `conversion_traits` to select |
| an optimized implementation is supplied. Such implementation uses an optimal |
| range checking code suitable for the source/target combination. |
| |
| * The converter's out-of-range behavior can be customized via an |
| [link boost_numericconversion.numeric_converter_policy_classes.policy_overflowhandler OverflowHandler] policy. |
| * For floating-point to integral conversions, the rounding mode can be selected via the |
| [link boost_numericconversion.numeric_converter_policy_classes.policy_float2introunder Float2IntRounder] policy. |
| * A custom low-level conversion routine (for UDTs for instance) can be passed via a |
| [link boost_numericconversion.numeric_converter_policy_classes.policy_rawconverter RawConverter] policy. |
| * The optimized automatic range-checking logic can be overridden via a |
| [link boost_numericconversion.numeric_converter_policy_classes.policy_userrangechecker UserRangeChecker] policy. |
| |
| [endsect] |
| |
| |
| |
| [include definitions.qbk] |
| [include converter.qbk] |
| [include requirements.qbk] |
| [include bounds.qbk] |
| [include conversion_traits.qbk] |
| [include converter_policies.qbk] |
| [include numeric_cast.qbk] |
| |
| |
| |
| [section History and Acknowledgments] |
| |
| |
| [heading Pre-formal review] |
| |
| * Kevlin Henney, with help from David Abrahams and Beman Dawes, originally contributed |
| the previous version of `numeric_cast<>` which already presented the idea of a runtime |
| range check. |
| |
| * Later, Eric Ford, Kevin Lynch and the author spotted some genericity problems with |
| that `numeric_cast<>` which prevented it from being used in a generic layer of math |
| functions. |
| |
| * An improved `numeric_cast<>` which properly handled all combinations of arithmetic |
| types was presented. |
| |
| * David Abrahams and Beman Dawes acknowledged the need of an improved version of |
| `numeric_cast<>` and supported the submission as originally laid out. Daryl Walker and |
| Darin Adler made some important comments and proposed fixes to the original submission. |
| |
| * Special thanks go to Björn Karlsoon who helped the author considerably. Having found the |
| problems with `numeric_cast<>` himself, he revised very carefully the original submission |
| and spot a subtle bug in the range checking implementation. He also wrote part of |
| this documentation and proof-read and corrected other parts. And most importantly: |
| the features now presented here in this library evolved from the original submission as |
| a result of the useful private communications between Björn and the author. |
| |
| [heading Post-formal review] |
| |
| * Guillaume Melquiond spoted some documentation and code issues, particularly about |
| rounding conversions. |
| |
| * The following people contributed an important review of the design, documentation and c |
| ode: Kevin Lynch, Thorsten Ottosen, Paul Bristow, Daryle Walker, Jhon Torjo, Eric Ford, |
| Gennadiy Rozental. |
| |
| |
| [endsect] |
| |
| [section Bibliography] |
| |
| * Standard Documents: |
| # ISO/IEC 14882:98 (C++98 Standard) |
| # ISO/IEC 9899:1999 (C99 Standard) |
| # ISO/IEC 10967-1 (Language Independent Arithmetic (LIA), Part I, 1994) |
| # ISO/IEC 2382-1:1993 (Information Technology - Vocabulary - Part I: Fundamental Terms) |
| # ANSI/IEEE 754-1985 [and IEC 60559:1989] (Binary floating-point) |
| # ANSI/IEEE 854-1988 (Radix Independent floating-point) |
| # ANSI X3/TR-1-82 (Dictionary for Information Processing Systems) |
| # ISO/IEC JTC1/SC22/WG14/N753 C9X Revision Proposal: LIA-1 Binding: Rationale |
| * Papers: |
| # David Goldberg What Every Computer Scientist Should Know About Floating-Point Arithmetic |
| # Prof. William Kahan papers on floating-point. |
| |
| [endsect] |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |