/usr/include/ql/math/rounding.hpp is in libquantlib0-dev 1.4-2+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /* -*- 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
<http://quantlib.org/license.shtml>.
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 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.
*/
class Rounding {
public:
//! rounding methods
/*! The rounding methods follow the OMG specification available
at <http://www.omg.org/cgi-bin/doc?formal/00-06-29.pdf>.
\warning the names of the Floor and Ceiling methods might
be misleading. Check the provided reference.
*/
enum Type {
None, /*!< do not round: return the number unmodified */
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 */
Down, /*!< all decimal places past the precision will be
truncated */
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. */
Floor, /*!< positive numbers will be rounded up and negative
numbers will be rounded down using the OMG round up
and round down rules */
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.
*/
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_; }
private:
Integer precision_;
Type type_;
Integer digit_;
};
//! Up-rounding.
class UpRounding : public Rounding {
public:
UpRounding(Integer precision,
Integer digit = 5)
: Rounding(precision,Up,digit) {}
};
//! Down-rounding.
class DownRounding : public Rounding {
public:
DownRounding(Integer precision,
Integer digit = 5)
: Rounding(precision,Down,digit) {}
};
//! Closest rounding.
class ClosestRounding : public Rounding {
public:
ClosestRounding(Integer precision,
Integer digit = 5)
: Rounding(precision,Closest,digit) {}
};
//! Ceiling truncation.
class CeilingTruncation : public Rounding {
public:
CeilingTruncation(Integer precision,
Integer digit = 5)
: Rounding(precision,Ceiling,digit) {}
};
//! %Floor truncation.
class FloorTruncation : public Rounding {
public:
FloorTruncation(Integer precision,
Integer digit = 5)
: Rounding(precision,Floor,digit) {}
};
}
#endif
|