Login  Register

Re: bugs in quantlib in bootstrap andCumulativeNormalDistribution

Posted by Chak Jack Wong on Sep 18, 2002; 7:55am
URL: http://quantlib.414.s1.nabble.com/bugs-in-quantlib-in-bootstrap-and-CumulativeNormalDistribution-tp2182p2185.html

Hi,
I actually discover this bug.
To reproduce the bug is not difficult.  Simply build the curve using futures and
swaps only will give crash.

Jack

Luigi Ballabio wrote:

> Hi Xavier,
>          sorry for the delay, but we're having some hectic weeks and
> QuantLib has to get behind...
>
> At 07:21 PM 9/11/02 +0200, [hidden email] wrote:
> >Bug 1: already reported  :
> >
> >"Crashing error in bootstrap:
> >Building piecewiseFlatForward curve with futures and swaps only, the
> >function crash.
> >As far as I understand,  This is because in FuturesRateHelper'
> >discountGuess() function it calls discountImpl which try to get a value
> >with array index -1.
> >As a safety guard, I think in bootstrap() of PiecewiseFlatForward, we
> >should have
> >  double guess= ( (i==1)? Null< double >() : instrument->discountGuess() );
> >instead of
> >double guess = instrument->discountGuess();
> >To prevent this from happening. "
>
> I haven't been able to reproduce this (and besides, I've had a look at
> discountImpl and it seems sound---i.e., steps are taken to ensure that
> the array is not accessed out of bounds).
> Can you send me a set of data for which the bootstrapping fails?
>
> >Bug2: Europeanoption pricing on Unix:
> >We check the code and found that in "europeanoption.hpp" the following
> >const static member is declared:
> >
> >    static const Math::CumulativeNormalDistribution f_;
> >
> >This variable "f_" is never explicitly initialized, thus it is up to the
> >compilor to decide what to do when it is first used.
>
> Argh. I'm tempted to blame the compiler for this, as the above is
> initialized in europeanoption.cpp as
>      const Math::CumulativeNormalDistribution EuropeanOption::f_;
> which should be equivalent to
>      const Math::CumulativeNormalDistribution EuropeanOption::f_ =
>          Math::CumulativeNormalDistribution();
> which in turn should properly initialize f_ with a sigma=1.
> However, I'm too lazy to look up the C++ standard, so I might be wrong.
>
> Anyway, let's try to code around this. What happens on Unix if you:
> a) remove the line
>          static const Math::CumulativeNormalDistribution f_;
>     from europeanoption.hpp
> b) replace the line
>          const Math::CumulativeNormalDistribution EuropeanOption::f_;
>     in europeanoption.cpp with
>          namespace {
>              const Math::CumulativeNormalDistribution f_;
>          }
> and leave the rest unmodified?
>
> Later,
>          Luigi
>
> -------------------------------------------------------
> This SF.NET email is sponsored by: AMD - Your access to the experts
> on Hammer Technology! Open Source & Linux Developers, register now
> for the AMD Developer Symposium. Code: EX8664
> http://www.developwithamd.com/developerlab
> _______________________________________________
> Quantlib-users mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-users