QuantLib
: a free/open-source library for quantitative finance
fully annotated source code - version 1.34
Loading...
Searching...
No Matches
ql
math
rounding.cpp
Go to the documentation of this file.
1
/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3
/*
4
Copyright (C) 2004 Decillion Pty(Ltd)
5
6
This file is part of QuantLib, a free-software/open-source library
7
for financial quantitative analysts and developers - http://quantlib.org/
8
9
QuantLib is free software: you can redistribute it and/or modify it
10
under the terms of the QuantLib license. You should have received a
11
copy of the license along with this program; if not, please email
12
<quantlib-dev@lists.sf.net>. The license is also available online at
13
<http://quantlib.org/license.shtml>.
14
15
This program is distributed in the hope that it will be useful, but WITHOUT
16
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17
FOR A PARTICULAR PURPOSE. See the license for more details.
18
*/
19
20
/*! \file rounding.hpp
21
\brief Rounding implementation
22
*/
23
24
#include <
ql/math/rounding.hpp
>
25
#include <
ql/errors.hpp
>
26
27
namespace
QuantLib
{
28
29
Decimal
Rounding::operator()
(
Decimal
value)
const
{
30
31
if
(
type_
==
None
)
32
return
value;
33
34
Real
mult = std::pow(10.0,
precision_
);
35
bool
neg = (value < 0.0);
36
Real
lvalue = std::fabs(value)*mult;
37
Real
integral = 0.0;
38
Real
modVal = std::modf(lvalue,&integral);
39
lvalue -= modVal;
40
switch
(
type_
) {
41
case
Down
:
42
break
;
43
case
Up
:
44
if
(modVal != 0.0)
45
lvalue += 1.0;
46
break
;
47
case
Closest
:
48
if
(modVal >= (
digit_
/10.0))
49
lvalue += 1.0;
50
break
;
51
case
Floor
:
52
if
(!neg) {
53
if
(modVal >= (
digit_
/10.0))
54
lvalue += 1.0;
55
}
56
break
;
57
case
Ceiling
:
58
if
(neg) {
59
if
(modVal >= (
digit_
/10.0))
60
lvalue += 1.0;
61
}
62
break
;
63
default
:
64
QL_FAIL
(
"unknown rounding method"
);
65
}
66
return
(neg) ?
Real
(-(lvalue / mult)) :
Real
(lvalue / mult);
67
}
68
69
}
QuantLib::Rounding::Ceiling
@ Ceiling
Definition:
rounding.hpp:62
QuantLib::Rounding::Closest
@ Closest
Definition:
rounding.hpp:52
QuantLib::Rounding::Up
@ Up
Definition:
rounding.hpp:46
QuantLib::Rounding::Floor
@ Floor
Definition:
rounding.hpp:59
QuantLib::Rounding::Down
@ Down
Definition:
rounding.hpp:50
QuantLib::Rounding::None
@ None
Definition:
rounding.hpp:45
QuantLib::Rounding::precision_
Integer precision_
Definition:
rounding.hpp:83
QuantLib::Rounding::operator()
Decimal operator()(Decimal value) const
perform rounding
Definition:
rounding.cpp:29
QuantLib::Rounding::digit_
Integer digit_
Definition:
rounding.hpp:85
QuantLib::Rounding::type_
Type type_
Definition:
rounding.hpp:84
errors.hpp
Classes and functions for error handling.
QL_FAIL
#define QL_FAIL(message)
throw an error (possibly with file and line information)
Definition:
errors.hpp:92
QuantLib::Real
QL_REAL Real
real number
Definition:
types.hpp:50
QuantLib::Decimal
Real Decimal
decimal number
Definition:
types.hpp:54
QuantLib
Definition:
any.hpp:35
rounding.hpp
Rounding implementation.
Generated by
Doxygen
1.9.5