Logo Search packages:      
Sourcecode: quantlib version File versions


Go to the documentation of this file.
/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

 Copyright (C) 2004 Decillion Pty(Ltd)

 This file is part of QuantLib, a free-software/open-source library
 for financial quantitative analysts and developers - http://quantlib.org/

 QuantLib is free software: you can redistribute it and/or modify it
 under the terms of the QuantLib license.  You should have received a
 copy of the license along with this program; if not, please email
 <quantlib-dev@lists.sf.net>. The license is also available online at

 This program is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE.  See the license for more details.

/*! \file Math/rounding.hpp
    \brief Rounding implementation

#ifndef quantlib_rounding_hpp
#define quantlib_rounding_hpp

#include <ql/types.hpp>

namespace QuantLib {

    //! basic rounding class
    /*! \test the correctness of the returned values is tested by
              checking them against known good results.
00035     class Rounding {
        //! rounding methods
        /*! The rounding methods follow the OMG specification available
            at ftp://ftp.omg.org/pub/docs/formal/00-06-29.pdf

            \warning the names of the Floor and Ceiling methods might
                     be misleading
00044         enum Type {
00045             None,    /*!< do not round: return the number unmodified */
00046             Up,      /*!< the first decimal place past the precision will be
                          rounded up. This differs from the OMG rule which
                          rounds up only if the decimal to be rounded is
                          greater than or equal to the rounding digit */
00050             Down,    /*!< all decimal places past the precision will be
                          truncated */
00052             Closest, /*!< the first decimal place past the precision
                          will be rounded up if greater than or equal
                          to the rounding digit; this corresponds to
                          the OMG round-up rule.  When the rounding
                          digit is 5, the result will be the one
                          closest to the original number, hence the
                          name. */
00059             Floor,   /*!< positive numbers will be rounded up and negative
                          numbers will be rounded down using the OMG round up
                          and round down rules */
00062             Ceiling  /*!< positive numbers will be rounded down and negative
                          numbers will be rounded up using the OMG round up
                          and round down rules */
        //! default constructor
        /*! Instances built through this constructor don't perform
            any rounding.
00070         Rounding()
        : type_(None) {}
        Rounding(Integer precision,
                 Type type = Closest,
                 Integer digit = 5)
        : precision_(precision), type_(type), digit_(digit) {}
        //! perform rounding
        Decimal operator()(Decimal value) const;
        //! \name Inspectors
        Integer precision() const { return precision_; }
        Type type() const { return type_; }
        Integer roundingDigit() const { return digit_; }
        Integer precision_;
        Type type_;
        Integer digit_;

    //! Up-rounding.
00091     class UpRounding : public Rounding {
        UpRounding(Integer precision,
                   Integer digit = 5)
        : Rounding(precision,Up,digit) {}

    //! Down-rounding.
00099     class DownRounding : public Rounding {
        DownRounding(Integer precision,
                     Integer digit = 5)
        : Rounding(precision,Down,digit) {}

    //! Closest rounding.
00107     class ClosestRounding : public Rounding {
        ClosestRounding(Integer precision,
                        Integer digit = 5)
        : Rounding(precision,Closest,digit) {}

    //! Ceiling truncation.
00115     class CeilingTruncation : public Rounding {
        CeilingTruncation(Integer precision,
                          Integer digit = 5)
        : Rounding(precision,Ceiling,digit) {}

    //! Floor truncation.
00123     class FloorTruncation : public Rounding {
        FloorTruncation(Integer precision,
                        Integer digit = 5)
        : Rounding(precision,Floor,digit) {}



Generated by  Doxygen 1.6.0   Back to index