Daniel J. Duffy
Financial Instrument Pricing Using C++
Daniel J. Duffy
Financial Instrument Pricing Using C++
- Gebundenes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
C++ is one of the best languages for the development of financial engineering and instrument pricing applications. It has several features that allow developers to write robust, flexible and extensible software systems. It is an ANSI/ISO standard, fully object-oriented and interfaces with many third-party applications. It has support for templates and generic programming, massive reusability using templates ('write once') and support for legacy C applications. This book applies C++ to the design and implementation of classes, libraries and latest applications for option and derivative pricing…mehr
Andere Kunden interessierten sich auch für
- Peter JäckelMonte Carlo Methods in Finance183,99 €
- Dale GrayMacrofinancial Risk Analysis175,99 €
- Daniel J. DuffyMonte Carlo Frameworks160,99 €
- Yves HilpischDerivatives Analytics with Python82,99 €
- Gunter LöfflerCredit Risk Modeling using Excel and VBA124,99 €
- Paul DarbyshireHedge Fund Modelling and Analysis Using Excel and VBA122,99 €
- Stephen SatchellMarket Momentum84,99 €
-
-
-
C++ is one of the best languages for the development of financial engineering and instrument pricing applications. It has several features that allow developers to write robust, flexible and extensible software systems. It is an ANSI/ISO standard, fully object-oriented and interfaces with many third-party applications. It has support for templates and generic programming, massive reusability using templates ('write once') and support for legacy C applications. This book applies C++ to the design and implementation of classes, libraries and latest applications for option and derivative pricing models. The new edition follows the same structure as used in the first edition but is completely updated to reflect current practice and the numerous new developments that have taken place in computational finance over the past 5 years. It features over 50% new material including brand new code libraries supplied by Boost C++ (a repository for free peer-reviewed portable C++ source libraries), more extensive examples than used in the first edition, as well as calibration techniques that will bring readers right up to date with the latest programming technology. It supports the latest pricing and numerical techniques quants use as well as parallel and multithreading applications. Using the most up to date models and code it employs modern software engineering techniques to produce industrial-strength applications: - ? Using the Standard Template Library (STL) in finance ? Creating your own template classes and functions ? Reusable data structures for vectors, matrices and tensors ? Classes for numerical analysis (numerical linear algebra ...) ? Solving the Black Scholes equations, exact and approximate solutions ? Implementing the Finite Difference Method in C++ ? Integration with the 'Gang of Four' Design Patterns ? Interfacing with Excel (output and Add-Ins) ? Financial engineering and XML ? Cash flow and yield curves With the forthcoming launch of C++0x there has never been a better time for a revised edition to this C++ classic. The book is accompanied by a CD ROM which includes the most up to date source code so readers can implement all models immediately.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Produktdetails
- Produktdetails
- Wiley Finance Series
- Verlag: Wiley & Sons
- Artikelnr. des Verlages: 14597119000
- 2nd Ed.
- Seitenzahl: 1168
- Erscheinungstermin: 9. Oktober 2018
- Englisch
- Abmessung: 251mm x 174mm x 63mm
- Gewicht: 1889g
- ISBN-13: 9780470971192
- ISBN-10: 0470971193
- Artikelnr.: 33109495
- Wiley Finance Series
- Verlag: Wiley & Sons
- Artikelnr. des Verlages: 14597119000
- 2nd Ed.
- Seitenzahl: 1168
- Erscheinungstermin: 9. Oktober 2018
- Englisch
- Abmessung: 251mm x 174mm x 63mm
- Gewicht: 1889g
- ISBN-13: 9780470971192
- ISBN-10: 0470971193
- Artikelnr.: 33109495
DANIEL J. DUFFY started the company Datasim in 1987 to promote C++ as a new object-oriented language for developing applications in the roles of developer, architect and requirements analyst to help clients design and analyse software systems for Computer Aided Design (CAD), process control and hardware- software systems, logistics, holography (optical technology) and computational finance. He used a combination of top-down functional decomposition and bottom-up object-oriented programming techniques to create stable and extendible applications. Prior to Datasim, he worked on engineering and financial applications in oil and gas and semiconductor industries using a range of numerical methods (for example, the finite element method [FEM]) on mainframe and mini-computers. Duffy has BA (Mod), MSc and PhD degrees in pure, numerical and applied mathematics and has been active in promoting partial differential equation (PDE) and finite difference methods (FDM) to applications in computational finance. He was responsible for the introduction of the Fractional Step ("Soviet Splitting") method and the Alternating Direction Explicit (ADE) method in computational finance. He is the originator of two very popular and leading C++ online courses (both C++98 and C++11/14/17) on www.quantnet.com in cooperation with Quantnet LLC and Baruch College (CUNY), NYC. He also trains quants, developers and designers around the world. Duffy can be contacted at dduffy@datasim.nl. In his spare time, he tries to keep in shape by workouts in the dojo.
CHAPTER 1 A Tour of C++ and Environs 1 1.1 Introduction and Objectives 1
1.2 What is C++? 1 1.3 C++ as a Multiparadigm Programming Language 2 1.4
The Structure and Contents of this Book: Overview 4 1.5 A Tour of C++11:
Black-Scholes and Environs 6 1.6 Parallel Programming in C++ and Parallel
C++ Libraries 12 1.7 Writing C++ Applications; Where and How to Start? 14
1.8 For whom is this Book Intended? 16 1.9 Next-Generation Design and
Design Patterns in C++ 16 1.10 Some Useful Guidelines and Developer
Folklore 17 1.11 About the Author 18 1.12 The Source Code and Getting the
Source Code 19 CHAPTER 2 New and Improved C++ Fundamentals 21 2.1
Introduction and Objectives 21 2.2 The C++ Smart Pointers 21 2.3 Using
Smart Pointers in Code 23 2.4 Extended Examples of Smart Pointers Usage 30
2.5 Move Semantics and Rvalue References 34 2.6 Other Bits and Pieces:
Usability Enhancements 39 2.7 Summary and Conclusions 52 2.8 Exercises and
Projects 52 CHAPTER 3 Modelling Functions in C++ 59 3.1 Introduction and
Objectives 59 3.2 Analysing and Classifying Functions 60 3.3 New
Functionality in C++: std::function 64 3.4 New Functionality in C++: Lambda
Functions and Lambda Expressions 65 3.5 Callable Objects 69 3.6 Function
Adapters and Binders 70 3.7 Application Areas 75 3.8 An Example: Strategy
Pattern New Style 75 3.9 Migrating from Traditional Object-Oriented
Solutions: Numerical Quadrature 78 3.10 Summary and Conclusions 81 3.11
Exercises and Projects 82 CHAPTER 4 Advanced C++ Template Programming 89
4.1 Introduction and Objectives 89 4.2 Preliminaries 91 4.3 decltype
Specifier 94 4.4 Life Before and After decltype 101 4.5 std::result_of and
SFINAE 106 4.6 std::enable_if 108 4.7 Boost enable_if 112 4.8
std::decay()Trait 114 4.9 A Small Application: Quantities and Units 115
4.10 Conclusions and Summary 118 4.11 Exercises and Projects 118 CHAPTER 5
Tuples in C++ and their Applications 123 5.1 Introduction and Objectives
123 5.2 An std:pair Refresher and New Extensions 123 5.3 Mathematical and
Computer Science Background 128 5.4 Tuple Fundamentals and Simple Examples
130 5.5 Advanced Tuples 130 5.6 Using Tuples in Code 133 5.7 Other Related
Libraries 138 5.8 Tuples and Run-Time Efficiency 140 5.9 Advantages and
Applications of Tuples 142 5.10 Summary and Conclusions 143 5.11 Exercises
and Projects 143 CHAPTER 6 Type Traits, Advanced Lambdas and Multiparadigm
Design in C++ 147 6.1 Introduction and Objectives 147 6.2 Some Building
Blocks 149 6.3 C++ Type Traits 150 6.4 Initial Examples of Type Traits 158
6.5 Generic Lambdas 161 6.6 How Useful will Generic Lambda Functions be in
the Future? 164 6.7 Generalised Lambda Capture 171 6.7.1 Living Without
Generalised Lambda Capture 173 6.8 Application to Stochastic Differential
Equations 174 6.9 Emerging Multiparadigm Design Patterns: Summary 178 6.10
Summary and Conclusions 179 6.11 Exercises and Projects 179 CHAPTER 7
Multiparadigm Design in C++ 185 7.1 Introduction and Objectives 185 7.2
Modelling and Design 185 7.3 Low-Level C++ Design of Classes 190 7.4 Shades
of Polymorphism 199 7.5 Is there More to Life than Inheritance? 206 7.6 An
Introduction to Object-Oriented Software Metrics 207 7.7 Summary and
Conclusions 210 7.8 Exercises and Projects 210 CHAPTER 8 C++ Numerics, IEEE
754 and Boost C++ Multiprecision 215 8.1 Introduction and Objectives 215
8.2 Floating-Point Decomposition Functions in C++ 219 8.3 A Tour of
std::numeric_limits 221 8.4 An Introduction to Error Analysis 223 8.5
Example: Numerical Quadrature 224 8.6 Other Useful Mathematical Functions
in C++ 228 8.7 Creating C++ Libraries 231 8.8 Summary and Conclusions 239
8.9 Exercises and Projects 239 CHAPTER 9 An Introduction to Unified
Software Design 245 9.1 Introduction and Objectives 245 9.1.1 Future
Predictions and Expectations 246 9.2 Background 247 9.3 System Scoping and
Initial Decomposition 251 9.4 Checklist and Looking Back 259 9.5 Variants
of the Software Process: Policy-Based Design 260 9.6 Using Policy-Based
Design for the DVM Problem 268 9.7 Advantages of Uniform Design Approach
273 9.8 Summary and Conclusions 274 9.9 Exercises and Projects 275 CHAPTER
10 New Data Types, Containers and Algorithms in C++ and Boost C++ Libraries
283 10.1 Introduction and Objectives 283 10.2 Overview of New Features 283
10.3 C++ std::bitset and Boost Dynamic Bitset Library 284 10.4 Chrono
Library 288 10.5 Boost Date and Time 301 10.6 Forwards Lists and
Compile-Time Arrays 306 10.7 Applications of Boost.Array 311 10.8 Boost
uBLAS (Matrix Library) 313 10.9 Vectors 316 10.10 Matrices 318 10.11
Applying uBLAS: Solving Linear Systems of Equations 322 10.12 Summary and
Conclusions 330 10.13 Exercises and Projects 331 CHAPTER 11 Lattice Models
Fundamental Data Structures and Algorithms 333 11.1 Introduction and
Objectives 333 11.2 Background and Current Approaches to Lattice Modelling
334 11.3 New Requirements and Use Cases 335 11.4 A New Design Approach: A
Layered Approach 335 11.5 Initial '101' Examples of Option Pricing 347 11.6
Advantages of Software Layering 349 11.7 Improving Efficiency and
Reliability 352 11.8 Merging Lattices 355 11.9 Summary and Conclusions 357
11.10 Exercises and Projects 357 CHAPTER 12 Lattice Models Applications to
Computational Finance 367 12.1 Introduction and Objectives 367 12.2 Stress
Testing the Lattice Data Structures 368 12.3 Option Pricing Using Bernoulli
Paths 372 12.4 Binomial Model for Assets with Dividends 374 12.5 Computing
Option Sensitivities 377 12.6 (Quick) Numerical Analysis of the Binomial
Method 379 12.7 Richardson Extrapolation with Binomial Lattices 382 12.8
Two-Dimensional Binomial Method 382 12.9 Trinomial Model of the Asset Price
384 12.10 Stability and Convergence of the Trinomial Method 385 12.11
Explicit Finite Difference Method 386 12.12 Summary and Conclusions 389
12.13 Exercises and Projects 389 CHAPTER 13 Numerical Linear Algebra:
Tridiagonal Systems and Applications 395 13.1 Introduction and Objectives
395 13.2 Solving Tridiagonal Matrix Systems 395 13.3 The Crank-Nicolson and
Theta Methods 406 13.4 The ADE Method for the Impatient 411 13.5 Cubic
Spline Interpolation 415 13.6 Some Handy Utilities 427 13.7 Summary and
Conclusions 428 13.8 Exercises and Projects 429 CHAPTER 14 Data
Visualisation in Excel 433 14.1 Introduction and Objectives 433 14.2 The
Structure of Excel-Related Objects 433 14.3 Sanity Check: Is the Excel
Infrastructure Up and Running? 435 14.4 ExcelDriver and Matrices 437 14.5
ExcelDriver and Vectors 444 14.6 Path Generation for Stochastic
Differential Equations 448 14.7 Summary and Conclusions 459 14.8 Exercises
and Projects 459 14.9 Appendix: COM Architecture Overview 463 14.10 An
Example 468 14.11 Virtual Function Tables 471 14.12 Differences between COM
and Object-Oriented Paradigm 473 14.13 Initialising the COM Library 474
CHAPTER 15 Univariate Statistical Distributions 475 15.1 Introduction,
Goals and Objectives 475 15.2 The Error Function and Its Universality 475
15.3 One-Factor Plain Options 478 15.4 Option Sensitivities and Surfaces
488 15.5 Automating Data Generation 491 15.6 Introduction to Statistical
Distributions and Functions 499 15.7 Advanced Distributions 504 15.8
Summary and Conclusions 511 15.9 Exercises and Projects 511 CHAPTER 16
Bivariate Statistical Distributions and Two-Asset Option Pricing 515 16.1
Introduction and Objectives 515 16.2 Computing Integrals Using PDEs 516
16.3 The Drezner Algorithm 521 16.4 The Genz Algorithm and the
West/Quantlib Implementations 521 16.5 Abramowitz and Stegun Approximation
525 16.6 Performance Testing 528 16.7 Gauss-Legendre Integration 529 16.8
Applications to Two-Asset Pricing 531 16.9 Trivariate Normal Distribution
536 16.10 Chooser Options 543 16.11 Conclusions and Summary 545 16.12
Exercises and Projects 546 CHAPTER 17 STL Algorithms in Detail 551 17.1
Introduction and Objectives 551 17.2 Binders and std::bind 554 17.3
Non-modifying Algorithms 557 17.4 Modifying Algorithms 567 17.5
Compile-Time Arrays 575 17.6 Summary and Conclusions 576 17.7 Exercises and
Projects 576 17.8 Appendix: Review of STL Containers and Complexity
Analysis 583 CHAPTER 18 STL Algorithms Part II 589 18.1 Introduction and
Objectives 589 18.2 Mutating Algorithms 589 18.3 Numeric Algorithms 597
18.4 Sorting Algorithms 601 18.5 Sorted-Range Algorithms 604 18.5.5 Merging
608 18.6 Auxiliary Iterator Functions 609 18.7 Needle in a Haystack:
Finding the Right STL Algorithm 612 18.8 Applications to Computational
Finance 613 18.9 Advantages of STL Algorithms 613 18.10 Summary and
Conclusions 614 18.11 Exercises and Projects 614 CHAPTER 19 An Introduction
to Optimisation and the Solution of Nonlinear Equations 617 19.1
Introduction and Objectives 617 19.2 Mathematical and Numerical Background
618 19.3 Sequential Search Methods 619 19.4 Solutions of Nonlinear
Equations 620 19.5 Fixed-Point Iteration 622 19.6 Aitken's Acceleration
Process 623 19.7 Software Framework 623 19.8 Implied Volatility 632 19.9
Solvers in the Boost C++ Libraries 632 19.10 Summary and Conclusions 633
19.11 Exercises and Projects 633 19.12 Appendix: The Banach Fixed-Point
Theorem 636 CHAPTER 20 The Finite Difference Method for PDEs: Mathematical
Background 641 20.1 Introduction and Objectives 641 20.2 General
Convection-Diffusion-Reaction Equations and Black-Scholes PDE 641 20.3 PDE
Preprocessing 64520.3.2 Reduction of PDE to Conservative Form 646 20.4
Maximum Principles for Parabolic PDEs 649 20.5 The Fichera Theory 650 20.6
Finite Difference Schemes: Properties and Requirements 654 20.7 Example: A
Linear Two-Point Boundary Value Problem 655 20.8 Exponentially Fitted
Schemes for Time-Dependent PDEs 659 20.9 Richardson Extrapolation 663 20.10
Summary and Conclusions 665 20.11 Exercises and Projects 666 CHAPTER 21
Software Framework for One-Factor Option Models 669 21.1 Introduction and
Objectives 669 21.2 A Software Framework: Architecture and Context 669 21.3
Modelling PDEs and Finite Difference Schemes: What is Supported? 670 21.4
Several Versions of Alternating Direction Explicit 671 21.5 A Software
Framework: Detailed Design and Implementation 673 21.6 C++ Code for PDE
Classes 674 21.7 C++ Code for FDM Classes 679 21.8 Examples and Test Cases
690 21.9 Summary and Conclusions 693 21.10 Exercises and Projects 694
CHAPTER 22 Extending the Software Framework 701 22.1 Introduction and
Objectives 701 22.2 Spline Interpolation of Option Values 701 22.3
Numerical Differentiation Foundations 704 22.4 Numerical Greeks 710 22.5
Constant Elasticity of Variance Model 715 22.6 Using Software Design (GOF)
Patterns 715 22.7 Multiparadigm Design Patterns 720 22.8 Summary and
Conclusions 721 22.9 Exercises and Projects 721 CHAPTER 23A PDE Software
Framework in C++11 for a Class of Path-Dependent Options 727 23.1
Introduction and Objectives 727 23.2 Modelling PDEs and Initial Boundary
Value Problems in the Functional Programming Style 728 23.3 PDE
Preprocessing 731 23.4 The Anchoring PDE 732 23.5 ADE for Anchoring PDE 739
23.6 Useful Utilities 746 23.7 Accuracy and Performance 748 23.8 Summary
and Conclusions 750 23.9 Exercises and Projects 751 CHAPTER 24 Ordinary
Differential Equations and their Numerical Approximation 755 24.1
Introduction and Objectives 755 24.2 What is an ODE? 755 24.3 Classifying
ODEs 756 24.4 A Palette of Model ODEs 757 24.5 Existence and Uniqueness
Results 760 24.6 Overview of Numerical Methods for ODEs: The Big Picture
763 24.7 Creating ODE Solvers in C++ 770 24.8 Summary and Conclusions 776
24.9 Exercises and Projects 776 24.10 Appendix 778 CHAPTER 25 Advanced
Ordinary Differential Equations and Method of Lines 781 25.1 Introduction
and Objectives 781 25.2 An Introduction to the Boost Odeint Library 782
25.3 Systems of Stiff and Non-stiff Equations 791 25.4 Matrix Differential
Equations 796 25.5 The Method of Lines: What is it and what are its
Advantages? 799 25.6 Initial Foray in Computational Finance: MOL for
One-Factor Black-Scholes PDE 801 25.7 Barrier Options 806 25.8 Using
Exponential Fitting of Barrier Options 808 25.9 Summary and Conclusions 808
25.10 Exercises and Projects 809 CHAPTER 26 Random Number Generation and
Distributions 819 26.1 Introduction and Objectives 819 26.2 What is a
Random Number Generator? 820 26.3 What is a Distribution? 821 26.4 Some
Initial Examples 825 26.5 Engines in Detail 827 26.6 Distributions in C++:
The List 830 26.7 Back to the Future: C-Style Pseudo-Random Number
Generation 831 26.8 Cryptographic Generators 833 26.9 Matrix Decomposition
Methods 833 26.10 Generating Random Numbers 845 26.11 Summary and
Conclusions 848 26.12 Exercises and Projects 849 CHAPTER 27 Microsoft .Net,
C# and C++11 Interoperability 853 27.1 Introduction and Objectives 853 27.2
The Big Picture 854 27.3 Types 858 27.4 Memory Management 859 27.5 An
Introduction to Native Classes 861 27.6 Interfaces and Abstract Classes 861
27.7 Use Case: C++/CLI as 'Main Language' 862 27.8 Use Case: Creating
Proxies, Adapters and Wrappers for Legacy C++ Applications 864 27.8.1
Alternative: SWIG (Simplified Wrapper and Interface Generator) 871 27.9
'Back to the Future' Use Case: Calling C# Code from C++11 872 27.10
Modelling Event-Driven Applications with Delegates 876 27.11 Use Case:
Interfacing with Legacy Code 886 27.12 Assemblies and Namespaces for
C++/CLI 889 27.13 Summary and Conclusions 895 27.14 Exercises and Projects
896 CHAPTER 28 C++ Concurrency, Part I Threads 899 28.1 Introduction and
Objectives 899 28.2 Thread Fundamentals 900 28.3 Six Ways to Create a
Thread 903 28.4 Intermezzo: Parallelising the Binomial Method 909 28.5
Atomics 916 28.6 Smart Pointers and the Thread-Safe Pointer Interface 924
28.7 Thread Synchronisation 926 28.8 When should we use Threads? 929 28.9
Summary and Conclusions 929 28.10 Exercises and Projects 930 CHAPTER 29 C++
Concurrency, Part II Tasks 935 29.1 Introduction and Objectives 935 29.2
Finding Concurrency: Motivation 936 29.3 Tasks and Task Decomposition 937
29.4 Futures and Promises 941 29.5 Shared Futures 945 29.6 Waiting on Tasks
to Complete 948 29.7 Continuations and Futures in Boost 950 29.8 Pure
Functions 952 29.9 Tasks versus Threads 953 29.10 Parallel Design Patterns
953 29.11 Summary and Conclusions 955 29.12 Quizzes, Exercises and Projects
955 CHAPTER 30 Parallel Patterns Language (PPL) 961 30.1 Introduction and
Objectives 961 30.2 Parallel Algorithms 962 30.3 Partitioning Work 967 30.4
The Aggregation/Reduction Pattern in PPL 971 30.5 Concurrent Containers 977
30.6 An Introduction to the Asynchronous Agents Library and Event-Based
Systems 978 30.7 A Design Plan to Implement a Framework Using Message
Passing and Other Approaches 986 30.8 Summary and Conclusions 989 30.9
Exercises and Projects 990 CHAPTER 31 Monte Carlo Simulation, Part I 993
31.1 Introduction and Objectives 993 31.2 The Boost Parameters Library for
the Impatient 995 31.3 Monte Carlo Version 1: The Monolith Program ('Ball
of Mud') 1000 31.4 Policy-Based Design: Dynamic Polymorphism 1003 31.5
Policy-Based Design Approach: CRTP and Static Polymorphism 1011 31.6
Builders and their Subcontractors (Factory Method Pattern) 1013 31.7
Practical Issue: Structuring the Project Directory and File Contents 1014
31.8 Summary and Conclusions 1016 31.9 Exercises and Projects 1017 CHAPTER
32 Monte Carlo Simulation, Part II 1023 32.1 Introduction and Objectives
1023 32.2 Parallel Processing and Monte Carlo Simulation 1023 32.3 A Family
of Predictor-Corrector Schemes 1033 32.4 An Example (CEV Model) 1038 32.5
Implementing the Monte Carlo Method Using the Asynchronous Agents Library
1041 32.6 Summary and Conclusions 1047 32.7 Exercises and Projects 1050
Appendix 1: Multiple-Precision Arithmetic 1053 Appendix 2: Computing
Implied Volatility 1075 References 1109 Index 1117
1.2 What is C++? 1 1.3 C++ as a Multiparadigm Programming Language 2 1.4
The Structure and Contents of this Book: Overview 4 1.5 A Tour of C++11:
Black-Scholes and Environs 6 1.6 Parallel Programming in C++ and Parallel
C++ Libraries 12 1.7 Writing C++ Applications; Where and How to Start? 14
1.8 For whom is this Book Intended? 16 1.9 Next-Generation Design and
Design Patterns in C++ 16 1.10 Some Useful Guidelines and Developer
Folklore 17 1.11 About the Author 18 1.12 The Source Code and Getting the
Source Code 19 CHAPTER 2 New and Improved C++ Fundamentals 21 2.1
Introduction and Objectives 21 2.2 The C++ Smart Pointers 21 2.3 Using
Smart Pointers in Code 23 2.4 Extended Examples of Smart Pointers Usage 30
2.5 Move Semantics and Rvalue References 34 2.6 Other Bits and Pieces:
Usability Enhancements 39 2.7 Summary and Conclusions 52 2.8 Exercises and
Projects 52 CHAPTER 3 Modelling Functions in C++ 59 3.1 Introduction and
Objectives 59 3.2 Analysing and Classifying Functions 60 3.3 New
Functionality in C++: std::function 64 3.4 New Functionality in C++: Lambda
Functions and Lambda Expressions 65 3.5 Callable Objects 69 3.6 Function
Adapters and Binders 70 3.7 Application Areas 75 3.8 An Example: Strategy
Pattern New Style 75 3.9 Migrating from Traditional Object-Oriented
Solutions: Numerical Quadrature 78 3.10 Summary and Conclusions 81 3.11
Exercises and Projects 82 CHAPTER 4 Advanced C++ Template Programming 89
4.1 Introduction and Objectives 89 4.2 Preliminaries 91 4.3 decltype
Specifier 94 4.4 Life Before and After decltype 101 4.5 std::result_of and
SFINAE 106 4.6 std::enable_if 108 4.7 Boost enable_if 112 4.8
std::decay()Trait 114 4.9 A Small Application: Quantities and Units 115
4.10 Conclusions and Summary 118 4.11 Exercises and Projects 118 CHAPTER 5
Tuples in C++ and their Applications 123 5.1 Introduction and Objectives
123 5.2 An std:pair Refresher and New Extensions 123 5.3 Mathematical and
Computer Science Background 128 5.4 Tuple Fundamentals and Simple Examples
130 5.5 Advanced Tuples 130 5.6 Using Tuples in Code 133 5.7 Other Related
Libraries 138 5.8 Tuples and Run-Time Efficiency 140 5.9 Advantages and
Applications of Tuples 142 5.10 Summary and Conclusions 143 5.11 Exercises
and Projects 143 CHAPTER 6 Type Traits, Advanced Lambdas and Multiparadigm
Design in C++ 147 6.1 Introduction and Objectives 147 6.2 Some Building
Blocks 149 6.3 C++ Type Traits 150 6.4 Initial Examples of Type Traits 158
6.5 Generic Lambdas 161 6.6 How Useful will Generic Lambda Functions be in
the Future? 164 6.7 Generalised Lambda Capture 171 6.7.1 Living Without
Generalised Lambda Capture 173 6.8 Application to Stochastic Differential
Equations 174 6.9 Emerging Multiparadigm Design Patterns: Summary 178 6.10
Summary and Conclusions 179 6.11 Exercises and Projects 179 CHAPTER 7
Multiparadigm Design in C++ 185 7.1 Introduction and Objectives 185 7.2
Modelling and Design 185 7.3 Low-Level C++ Design of Classes 190 7.4 Shades
of Polymorphism 199 7.5 Is there More to Life than Inheritance? 206 7.6 An
Introduction to Object-Oriented Software Metrics 207 7.7 Summary and
Conclusions 210 7.8 Exercises and Projects 210 CHAPTER 8 C++ Numerics, IEEE
754 and Boost C++ Multiprecision 215 8.1 Introduction and Objectives 215
8.2 Floating-Point Decomposition Functions in C++ 219 8.3 A Tour of
std::numeric_limits 221 8.4 An Introduction to Error Analysis 223 8.5
Example: Numerical Quadrature 224 8.6 Other Useful Mathematical Functions
in C++ 228 8.7 Creating C++ Libraries 231 8.8 Summary and Conclusions 239
8.9 Exercises and Projects 239 CHAPTER 9 An Introduction to Unified
Software Design 245 9.1 Introduction and Objectives 245 9.1.1 Future
Predictions and Expectations 246 9.2 Background 247 9.3 System Scoping and
Initial Decomposition 251 9.4 Checklist and Looking Back 259 9.5 Variants
of the Software Process: Policy-Based Design 260 9.6 Using Policy-Based
Design for the DVM Problem 268 9.7 Advantages of Uniform Design Approach
273 9.8 Summary and Conclusions 274 9.9 Exercises and Projects 275 CHAPTER
10 New Data Types, Containers and Algorithms in C++ and Boost C++ Libraries
283 10.1 Introduction and Objectives 283 10.2 Overview of New Features 283
10.3 C++ std::bitset and Boost Dynamic Bitset Library 284 10.4 Chrono
Library 288 10.5 Boost Date and Time 301 10.6 Forwards Lists and
Compile-Time Arrays 306 10.7 Applications of Boost.Array 311 10.8 Boost
uBLAS (Matrix Library) 313 10.9 Vectors 316 10.10 Matrices 318 10.11
Applying uBLAS: Solving Linear Systems of Equations 322 10.12 Summary and
Conclusions 330 10.13 Exercises and Projects 331 CHAPTER 11 Lattice Models
Fundamental Data Structures and Algorithms 333 11.1 Introduction and
Objectives 333 11.2 Background and Current Approaches to Lattice Modelling
334 11.3 New Requirements and Use Cases 335 11.4 A New Design Approach: A
Layered Approach 335 11.5 Initial '101' Examples of Option Pricing 347 11.6
Advantages of Software Layering 349 11.7 Improving Efficiency and
Reliability 352 11.8 Merging Lattices 355 11.9 Summary and Conclusions 357
11.10 Exercises and Projects 357 CHAPTER 12 Lattice Models Applications to
Computational Finance 367 12.1 Introduction and Objectives 367 12.2 Stress
Testing the Lattice Data Structures 368 12.3 Option Pricing Using Bernoulli
Paths 372 12.4 Binomial Model for Assets with Dividends 374 12.5 Computing
Option Sensitivities 377 12.6 (Quick) Numerical Analysis of the Binomial
Method 379 12.7 Richardson Extrapolation with Binomial Lattices 382 12.8
Two-Dimensional Binomial Method 382 12.9 Trinomial Model of the Asset Price
384 12.10 Stability and Convergence of the Trinomial Method 385 12.11
Explicit Finite Difference Method 386 12.12 Summary and Conclusions 389
12.13 Exercises and Projects 389 CHAPTER 13 Numerical Linear Algebra:
Tridiagonal Systems and Applications 395 13.1 Introduction and Objectives
395 13.2 Solving Tridiagonal Matrix Systems 395 13.3 The Crank-Nicolson and
Theta Methods 406 13.4 The ADE Method for the Impatient 411 13.5 Cubic
Spline Interpolation 415 13.6 Some Handy Utilities 427 13.7 Summary and
Conclusions 428 13.8 Exercises and Projects 429 CHAPTER 14 Data
Visualisation in Excel 433 14.1 Introduction and Objectives 433 14.2 The
Structure of Excel-Related Objects 433 14.3 Sanity Check: Is the Excel
Infrastructure Up and Running? 435 14.4 ExcelDriver and Matrices 437 14.5
ExcelDriver and Vectors 444 14.6 Path Generation for Stochastic
Differential Equations 448 14.7 Summary and Conclusions 459 14.8 Exercises
and Projects 459 14.9 Appendix: COM Architecture Overview 463 14.10 An
Example 468 14.11 Virtual Function Tables 471 14.12 Differences between COM
and Object-Oriented Paradigm 473 14.13 Initialising the COM Library 474
CHAPTER 15 Univariate Statistical Distributions 475 15.1 Introduction,
Goals and Objectives 475 15.2 The Error Function and Its Universality 475
15.3 One-Factor Plain Options 478 15.4 Option Sensitivities and Surfaces
488 15.5 Automating Data Generation 491 15.6 Introduction to Statistical
Distributions and Functions 499 15.7 Advanced Distributions 504 15.8
Summary and Conclusions 511 15.9 Exercises and Projects 511 CHAPTER 16
Bivariate Statistical Distributions and Two-Asset Option Pricing 515 16.1
Introduction and Objectives 515 16.2 Computing Integrals Using PDEs 516
16.3 The Drezner Algorithm 521 16.4 The Genz Algorithm and the
West/Quantlib Implementations 521 16.5 Abramowitz and Stegun Approximation
525 16.6 Performance Testing 528 16.7 Gauss-Legendre Integration 529 16.8
Applications to Two-Asset Pricing 531 16.9 Trivariate Normal Distribution
536 16.10 Chooser Options 543 16.11 Conclusions and Summary 545 16.12
Exercises and Projects 546 CHAPTER 17 STL Algorithms in Detail 551 17.1
Introduction and Objectives 551 17.2 Binders and std::bind 554 17.3
Non-modifying Algorithms 557 17.4 Modifying Algorithms 567 17.5
Compile-Time Arrays 575 17.6 Summary and Conclusions 576 17.7 Exercises and
Projects 576 17.8 Appendix: Review of STL Containers and Complexity
Analysis 583 CHAPTER 18 STL Algorithms Part II 589 18.1 Introduction and
Objectives 589 18.2 Mutating Algorithms 589 18.3 Numeric Algorithms 597
18.4 Sorting Algorithms 601 18.5 Sorted-Range Algorithms 604 18.5.5 Merging
608 18.6 Auxiliary Iterator Functions 609 18.7 Needle in a Haystack:
Finding the Right STL Algorithm 612 18.8 Applications to Computational
Finance 613 18.9 Advantages of STL Algorithms 613 18.10 Summary and
Conclusions 614 18.11 Exercises and Projects 614 CHAPTER 19 An Introduction
to Optimisation and the Solution of Nonlinear Equations 617 19.1
Introduction and Objectives 617 19.2 Mathematical and Numerical Background
618 19.3 Sequential Search Methods 619 19.4 Solutions of Nonlinear
Equations 620 19.5 Fixed-Point Iteration 622 19.6 Aitken's Acceleration
Process 623 19.7 Software Framework 623 19.8 Implied Volatility 632 19.9
Solvers in the Boost C++ Libraries 632 19.10 Summary and Conclusions 633
19.11 Exercises and Projects 633 19.12 Appendix: The Banach Fixed-Point
Theorem 636 CHAPTER 20 The Finite Difference Method for PDEs: Mathematical
Background 641 20.1 Introduction and Objectives 641 20.2 General
Convection-Diffusion-Reaction Equations and Black-Scholes PDE 641 20.3 PDE
Preprocessing 64520.3.2 Reduction of PDE to Conservative Form 646 20.4
Maximum Principles for Parabolic PDEs 649 20.5 The Fichera Theory 650 20.6
Finite Difference Schemes: Properties and Requirements 654 20.7 Example: A
Linear Two-Point Boundary Value Problem 655 20.8 Exponentially Fitted
Schemes for Time-Dependent PDEs 659 20.9 Richardson Extrapolation 663 20.10
Summary and Conclusions 665 20.11 Exercises and Projects 666 CHAPTER 21
Software Framework for One-Factor Option Models 669 21.1 Introduction and
Objectives 669 21.2 A Software Framework: Architecture and Context 669 21.3
Modelling PDEs and Finite Difference Schemes: What is Supported? 670 21.4
Several Versions of Alternating Direction Explicit 671 21.5 A Software
Framework: Detailed Design and Implementation 673 21.6 C++ Code for PDE
Classes 674 21.7 C++ Code for FDM Classes 679 21.8 Examples and Test Cases
690 21.9 Summary and Conclusions 693 21.10 Exercises and Projects 694
CHAPTER 22 Extending the Software Framework 701 22.1 Introduction and
Objectives 701 22.2 Spline Interpolation of Option Values 701 22.3
Numerical Differentiation Foundations 704 22.4 Numerical Greeks 710 22.5
Constant Elasticity of Variance Model 715 22.6 Using Software Design (GOF)
Patterns 715 22.7 Multiparadigm Design Patterns 720 22.8 Summary and
Conclusions 721 22.9 Exercises and Projects 721 CHAPTER 23A PDE Software
Framework in C++11 for a Class of Path-Dependent Options 727 23.1
Introduction and Objectives 727 23.2 Modelling PDEs and Initial Boundary
Value Problems in the Functional Programming Style 728 23.3 PDE
Preprocessing 731 23.4 The Anchoring PDE 732 23.5 ADE for Anchoring PDE 739
23.6 Useful Utilities 746 23.7 Accuracy and Performance 748 23.8 Summary
and Conclusions 750 23.9 Exercises and Projects 751 CHAPTER 24 Ordinary
Differential Equations and their Numerical Approximation 755 24.1
Introduction and Objectives 755 24.2 What is an ODE? 755 24.3 Classifying
ODEs 756 24.4 A Palette of Model ODEs 757 24.5 Existence and Uniqueness
Results 760 24.6 Overview of Numerical Methods for ODEs: The Big Picture
763 24.7 Creating ODE Solvers in C++ 770 24.8 Summary and Conclusions 776
24.9 Exercises and Projects 776 24.10 Appendix 778 CHAPTER 25 Advanced
Ordinary Differential Equations and Method of Lines 781 25.1 Introduction
and Objectives 781 25.2 An Introduction to the Boost Odeint Library 782
25.3 Systems of Stiff and Non-stiff Equations 791 25.4 Matrix Differential
Equations 796 25.5 The Method of Lines: What is it and what are its
Advantages? 799 25.6 Initial Foray in Computational Finance: MOL for
One-Factor Black-Scholes PDE 801 25.7 Barrier Options 806 25.8 Using
Exponential Fitting of Barrier Options 808 25.9 Summary and Conclusions 808
25.10 Exercises and Projects 809 CHAPTER 26 Random Number Generation and
Distributions 819 26.1 Introduction and Objectives 819 26.2 What is a
Random Number Generator? 820 26.3 What is a Distribution? 821 26.4 Some
Initial Examples 825 26.5 Engines in Detail 827 26.6 Distributions in C++:
The List 830 26.7 Back to the Future: C-Style Pseudo-Random Number
Generation 831 26.8 Cryptographic Generators 833 26.9 Matrix Decomposition
Methods 833 26.10 Generating Random Numbers 845 26.11 Summary and
Conclusions 848 26.12 Exercises and Projects 849 CHAPTER 27 Microsoft .Net,
C# and C++11 Interoperability 853 27.1 Introduction and Objectives 853 27.2
The Big Picture 854 27.3 Types 858 27.4 Memory Management 859 27.5 An
Introduction to Native Classes 861 27.6 Interfaces and Abstract Classes 861
27.7 Use Case: C++/CLI as 'Main Language' 862 27.8 Use Case: Creating
Proxies, Adapters and Wrappers for Legacy C++ Applications 864 27.8.1
Alternative: SWIG (Simplified Wrapper and Interface Generator) 871 27.9
'Back to the Future' Use Case: Calling C# Code from C++11 872 27.10
Modelling Event-Driven Applications with Delegates 876 27.11 Use Case:
Interfacing with Legacy Code 886 27.12 Assemblies and Namespaces for
C++/CLI 889 27.13 Summary and Conclusions 895 27.14 Exercises and Projects
896 CHAPTER 28 C++ Concurrency, Part I Threads 899 28.1 Introduction and
Objectives 899 28.2 Thread Fundamentals 900 28.3 Six Ways to Create a
Thread 903 28.4 Intermezzo: Parallelising the Binomial Method 909 28.5
Atomics 916 28.6 Smart Pointers and the Thread-Safe Pointer Interface 924
28.7 Thread Synchronisation 926 28.8 When should we use Threads? 929 28.9
Summary and Conclusions 929 28.10 Exercises and Projects 930 CHAPTER 29 C++
Concurrency, Part II Tasks 935 29.1 Introduction and Objectives 935 29.2
Finding Concurrency: Motivation 936 29.3 Tasks and Task Decomposition 937
29.4 Futures and Promises 941 29.5 Shared Futures 945 29.6 Waiting on Tasks
to Complete 948 29.7 Continuations and Futures in Boost 950 29.8 Pure
Functions 952 29.9 Tasks versus Threads 953 29.10 Parallel Design Patterns
953 29.11 Summary and Conclusions 955 29.12 Quizzes, Exercises and Projects
955 CHAPTER 30 Parallel Patterns Language (PPL) 961 30.1 Introduction and
Objectives 961 30.2 Parallel Algorithms 962 30.3 Partitioning Work 967 30.4
The Aggregation/Reduction Pattern in PPL 971 30.5 Concurrent Containers 977
30.6 An Introduction to the Asynchronous Agents Library and Event-Based
Systems 978 30.7 A Design Plan to Implement a Framework Using Message
Passing and Other Approaches 986 30.8 Summary and Conclusions 989 30.9
Exercises and Projects 990 CHAPTER 31 Monte Carlo Simulation, Part I 993
31.1 Introduction and Objectives 993 31.2 The Boost Parameters Library for
the Impatient 995 31.3 Monte Carlo Version 1: The Monolith Program ('Ball
of Mud') 1000 31.4 Policy-Based Design: Dynamic Polymorphism 1003 31.5
Policy-Based Design Approach: CRTP and Static Polymorphism 1011 31.6
Builders and their Subcontractors (Factory Method Pattern) 1013 31.7
Practical Issue: Structuring the Project Directory and File Contents 1014
31.8 Summary and Conclusions 1016 31.9 Exercises and Projects 1017 CHAPTER
32 Monte Carlo Simulation, Part II 1023 32.1 Introduction and Objectives
1023 32.2 Parallel Processing and Monte Carlo Simulation 1023 32.3 A Family
of Predictor-Corrector Schemes 1033 32.4 An Example (CEV Model) 1038 32.5
Implementing the Monte Carlo Method Using the Asynchronous Agents Library
1041 32.6 Summary and Conclusions 1047 32.7 Exercises and Projects 1050
Appendix 1: Multiple-Precision Arithmetic 1053 Appendix 2: Computing
Implied Volatility 1075 References 1109 Index 1117
CHAPTER 1 A Tour of C++ and Environs 1 1.1 Introduction and Objectives 1
1.2 What is C++? 1 1.3 C++ as a Multiparadigm Programming Language 2 1.4
The Structure and Contents of this Book: Overview 4 1.5 A Tour of C++11:
Black-Scholes and Environs 6 1.6 Parallel Programming in C++ and Parallel
C++ Libraries 12 1.7 Writing C++ Applications; Where and How to Start? 14
1.8 For whom is this Book Intended? 16 1.9 Next-Generation Design and
Design Patterns in C++ 16 1.10 Some Useful Guidelines and Developer
Folklore 17 1.11 About the Author 18 1.12 The Source Code and Getting the
Source Code 19 CHAPTER 2 New and Improved C++ Fundamentals 21 2.1
Introduction and Objectives 21 2.2 The C++ Smart Pointers 21 2.3 Using
Smart Pointers in Code 23 2.4 Extended Examples of Smart Pointers Usage 30
2.5 Move Semantics and Rvalue References 34 2.6 Other Bits and Pieces:
Usability Enhancements 39 2.7 Summary and Conclusions 52 2.8 Exercises and
Projects 52 CHAPTER 3 Modelling Functions in C++ 59 3.1 Introduction and
Objectives 59 3.2 Analysing and Classifying Functions 60 3.3 New
Functionality in C++: std::function 64 3.4 New Functionality in C++: Lambda
Functions and Lambda Expressions 65 3.5 Callable Objects 69 3.6 Function
Adapters and Binders 70 3.7 Application Areas 75 3.8 An Example: Strategy
Pattern New Style 75 3.9 Migrating from Traditional Object-Oriented
Solutions: Numerical Quadrature 78 3.10 Summary and Conclusions 81 3.11
Exercises and Projects 82 CHAPTER 4 Advanced C++ Template Programming 89
4.1 Introduction and Objectives 89 4.2 Preliminaries 91 4.3 decltype
Specifier 94 4.4 Life Before and After decltype 101 4.5 std::result_of and
SFINAE 106 4.6 std::enable_if 108 4.7 Boost enable_if 112 4.8
std::decay()Trait 114 4.9 A Small Application: Quantities and Units 115
4.10 Conclusions and Summary 118 4.11 Exercises and Projects 118 CHAPTER 5
Tuples in C++ and their Applications 123 5.1 Introduction and Objectives
123 5.2 An std:pair Refresher and New Extensions 123 5.3 Mathematical and
Computer Science Background 128 5.4 Tuple Fundamentals and Simple Examples
130 5.5 Advanced Tuples 130 5.6 Using Tuples in Code 133 5.7 Other Related
Libraries 138 5.8 Tuples and Run-Time Efficiency 140 5.9 Advantages and
Applications of Tuples 142 5.10 Summary and Conclusions 143 5.11 Exercises
and Projects 143 CHAPTER 6 Type Traits, Advanced Lambdas and Multiparadigm
Design in C++ 147 6.1 Introduction and Objectives 147 6.2 Some Building
Blocks 149 6.3 C++ Type Traits 150 6.4 Initial Examples of Type Traits 158
6.5 Generic Lambdas 161 6.6 How Useful will Generic Lambda Functions be in
the Future? 164 6.7 Generalised Lambda Capture 171 6.7.1 Living Without
Generalised Lambda Capture 173 6.8 Application to Stochastic Differential
Equations 174 6.9 Emerging Multiparadigm Design Patterns: Summary 178 6.10
Summary and Conclusions 179 6.11 Exercises and Projects 179 CHAPTER 7
Multiparadigm Design in C++ 185 7.1 Introduction and Objectives 185 7.2
Modelling and Design 185 7.3 Low-Level C++ Design of Classes 190 7.4 Shades
of Polymorphism 199 7.5 Is there More to Life than Inheritance? 206 7.6 An
Introduction to Object-Oriented Software Metrics 207 7.7 Summary and
Conclusions 210 7.8 Exercises and Projects 210 CHAPTER 8 C++ Numerics, IEEE
754 and Boost C++ Multiprecision 215 8.1 Introduction and Objectives 215
8.2 Floating-Point Decomposition Functions in C++ 219 8.3 A Tour of
std::numeric_limits 221 8.4 An Introduction to Error Analysis 223 8.5
Example: Numerical Quadrature 224 8.6 Other Useful Mathematical Functions
in C++ 228 8.7 Creating C++ Libraries 231 8.8 Summary and Conclusions 239
8.9 Exercises and Projects 239 CHAPTER 9 An Introduction to Unified
Software Design 245 9.1 Introduction and Objectives 245 9.1.1 Future
Predictions and Expectations 246 9.2 Background 247 9.3 System Scoping and
Initial Decomposition 251 9.4 Checklist and Looking Back 259 9.5 Variants
of the Software Process: Policy-Based Design 260 9.6 Using Policy-Based
Design for the DVM Problem 268 9.7 Advantages of Uniform Design Approach
273 9.8 Summary and Conclusions 274 9.9 Exercises and Projects 275 CHAPTER
10 New Data Types, Containers and Algorithms in C++ and Boost C++ Libraries
283 10.1 Introduction and Objectives 283 10.2 Overview of New Features 283
10.3 C++ std::bitset and Boost Dynamic Bitset Library 284 10.4 Chrono
Library 288 10.5 Boost Date and Time 301 10.6 Forwards Lists and
Compile-Time Arrays 306 10.7 Applications of Boost.Array 311 10.8 Boost
uBLAS (Matrix Library) 313 10.9 Vectors 316 10.10 Matrices 318 10.11
Applying uBLAS: Solving Linear Systems of Equations 322 10.12 Summary and
Conclusions 330 10.13 Exercises and Projects 331 CHAPTER 11 Lattice Models
Fundamental Data Structures and Algorithms 333 11.1 Introduction and
Objectives 333 11.2 Background and Current Approaches to Lattice Modelling
334 11.3 New Requirements and Use Cases 335 11.4 A New Design Approach: A
Layered Approach 335 11.5 Initial '101' Examples of Option Pricing 347 11.6
Advantages of Software Layering 349 11.7 Improving Efficiency and
Reliability 352 11.8 Merging Lattices 355 11.9 Summary and Conclusions 357
11.10 Exercises and Projects 357 CHAPTER 12 Lattice Models Applications to
Computational Finance 367 12.1 Introduction and Objectives 367 12.2 Stress
Testing the Lattice Data Structures 368 12.3 Option Pricing Using Bernoulli
Paths 372 12.4 Binomial Model for Assets with Dividends 374 12.5 Computing
Option Sensitivities 377 12.6 (Quick) Numerical Analysis of the Binomial
Method 379 12.7 Richardson Extrapolation with Binomial Lattices 382 12.8
Two-Dimensional Binomial Method 382 12.9 Trinomial Model of the Asset Price
384 12.10 Stability and Convergence of the Trinomial Method 385 12.11
Explicit Finite Difference Method 386 12.12 Summary and Conclusions 389
12.13 Exercises and Projects 389 CHAPTER 13 Numerical Linear Algebra:
Tridiagonal Systems and Applications 395 13.1 Introduction and Objectives
395 13.2 Solving Tridiagonal Matrix Systems 395 13.3 The Crank-Nicolson and
Theta Methods 406 13.4 The ADE Method for the Impatient 411 13.5 Cubic
Spline Interpolation 415 13.6 Some Handy Utilities 427 13.7 Summary and
Conclusions 428 13.8 Exercises and Projects 429 CHAPTER 14 Data
Visualisation in Excel 433 14.1 Introduction and Objectives 433 14.2 The
Structure of Excel-Related Objects 433 14.3 Sanity Check: Is the Excel
Infrastructure Up and Running? 435 14.4 ExcelDriver and Matrices 437 14.5
ExcelDriver and Vectors 444 14.6 Path Generation for Stochastic
Differential Equations 448 14.7 Summary and Conclusions 459 14.8 Exercises
and Projects 459 14.9 Appendix: COM Architecture Overview 463 14.10 An
Example 468 14.11 Virtual Function Tables 471 14.12 Differences between COM
and Object-Oriented Paradigm 473 14.13 Initialising the COM Library 474
CHAPTER 15 Univariate Statistical Distributions 475 15.1 Introduction,
Goals and Objectives 475 15.2 The Error Function and Its Universality 475
15.3 One-Factor Plain Options 478 15.4 Option Sensitivities and Surfaces
488 15.5 Automating Data Generation 491 15.6 Introduction to Statistical
Distributions and Functions 499 15.7 Advanced Distributions 504 15.8
Summary and Conclusions 511 15.9 Exercises and Projects 511 CHAPTER 16
Bivariate Statistical Distributions and Two-Asset Option Pricing 515 16.1
Introduction and Objectives 515 16.2 Computing Integrals Using PDEs 516
16.3 The Drezner Algorithm 521 16.4 The Genz Algorithm and the
West/Quantlib Implementations 521 16.5 Abramowitz and Stegun Approximation
525 16.6 Performance Testing 528 16.7 Gauss-Legendre Integration 529 16.8
Applications to Two-Asset Pricing 531 16.9 Trivariate Normal Distribution
536 16.10 Chooser Options 543 16.11 Conclusions and Summary 545 16.12
Exercises and Projects 546 CHAPTER 17 STL Algorithms in Detail 551 17.1
Introduction and Objectives 551 17.2 Binders and std::bind 554 17.3
Non-modifying Algorithms 557 17.4 Modifying Algorithms 567 17.5
Compile-Time Arrays 575 17.6 Summary and Conclusions 576 17.7 Exercises and
Projects 576 17.8 Appendix: Review of STL Containers and Complexity
Analysis 583 CHAPTER 18 STL Algorithms Part II 589 18.1 Introduction and
Objectives 589 18.2 Mutating Algorithms 589 18.3 Numeric Algorithms 597
18.4 Sorting Algorithms 601 18.5 Sorted-Range Algorithms 604 18.5.5 Merging
608 18.6 Auxiliary Iterator Functions 609 18.7 Needle in a Haystack:
Finding the Right STL Algorithm 612 18.8 Applications to Computational
Finance 613 18.9 Advantages of STL Algorithms 613 18.10 Summary and
Conclusions 614 18.11 Exercises and Projects 614 CHAPTER 19 An Introduction
to Optimisation and the Solution of Nonlinear Equations 617 19.1
Introduction and Objectives 617 19.2 Mathematical and Numerical Background
618 19.3 Sequential Search Methods 619 19.4 Solutions of Nonlinear
Equations 620 19.5 Fixed-Point Iteration 622 19.6 Aitken's Acceleration
Process 623 19.7 Software Framework 623 19.8 Implied Volatility 632 19.9
Solvers in the Boost C++ Libraries 632 19.10 Summary and Conclusions 633
19.11 Exercises and Projects 633 19.12 Appendix: The Banach Fixed-Point
Theorem 636 CHAPTER 20 The Finite Difference Method for PDEs: Mathematical
Background 641 20.1 Introduction and Objectives 641 20.2 General
Convection-Diffusion-Reaction Equations and Black-Scholes PDE 641 20.3 PDE
Preprocessing 64520.3.2 Reduction of PDE to Conservative Form 646 20.4
Maximum Principles for Parabolic PDEs 649 20.5 The Fichera Theory 650 20.6
Finite Difference Schemes: Properties and Requirements 654 20.7 Example: A
Linear Two-Point Boundary Value Problem 655 20.8 Exponentially Fitted
Schemes for Time-Dependent PDEs 659 20.9 Richardson Extrapolation 663 20.10
Summary and Conclusions 665 20.11 Exercises and Projects 666 CHAPTER 21
Software Framework for One-Factor Option Models 669 21.1 Introduction and
Objectives 669 21.2 A Software Framework: Architecture and Context 669 21.3
Modelling PDEs and Finite Difference Schemes: What is Supported? 670 21.4
Several Versions of Alternating Direction Explicit 671 21.5 A Software
Framework: Detailed Design and Implementation 673 21.6 C++ Code for PDE
Classes 674 21.7 C++ Code for FDM Classes 679 21.8 Examples and Test Cases
690 21.9 Summary and Conclusions 693 21.10 Exercises and Projects 694
CHAPTER 22 Extending the Software Framework 701 22.1 Introduction and
Objectives 701 22.2 Spline Interpolation of Option Values 701 22.3
Numerical Differentiation Foundations 704 22.4 Numerical Greeks 710 22.5
Constant Elasticity of Variance Model 715 22.6 Using Software Design (GOF)
Patterns 715 22.7 Multiparadigm Design Patterns 720 22.8 Summary and
Conclusions 721 22.9 Exercises and Projects 721 CHAPTER 23A PDE Software
Framework in C++11 for a Class of Path-Dependent Options 727 23.1
Introduction and Objectives 727 23.2 Modelling PDEs and Initial Boundary
Value Problems in the Functional Programming Style 728 23.3 PDE
Preprocessing 731 23.4 The Anchoring PDE 732 23.5 ADE for Anchoring PDE 739
23.6 Useful Utilities 746 23.7 Accuracy and Performance 748 23.8 Summary
and Conclusions 750 23.9 Exercises and Projects 751 CHAPTER 24 Ordinary
Differential Equations and their Numerical Approximation 755 24.1
Introduction and Objectives 755 24.2 What is an ODE? 755 24.3 Classifying
ODEs 756 24.4 A Palette of Model ODEs 757 24.5 Existence and Uniqueness
Results 760 24.6 Overview of Numerical Methods for ODEs: The Big Picture
763 24.7 Creating ODE Solvers in C++ 770 24.8 Summary and Conclusions 776
24.9 Exercises and Projects 776 24.10 Appendix 778 CHAPTER 25 Advanced
Ordinary Differential Equations and Method of Lines 781 25.1 Introduction
and Objectives 781 25.2 An Introduction to the Boost Odeint Library 782
25.3 Systems of Stiff and Non-stiff Equations 791 25.4 Matrix Differential
Equations 796 25.5 The Method of Lines: What is it and what are its
Advantages? 799 25.6 Initial Foray in Computational Finance: MOL for
One-Factor Black-Scholes PDE 801 25.7 Barrier Options 806 25.8 Using
Exponential Fitting of Barrier Options 808 25.9 Summary and Conclusions 808
25.10 Exercises and Projects 809 CHAPTER 26 Random Number Generation and
Distributions 819 26.1 Introduction and Objectives 819 26.2 What is a
Random Number Generator? 820 26.3 What is a Distribution? 821 26.4 Some
Initial Examples 825 26.5 Engines in Detail 827 26.6 Distributions in C++:
The List 830 26.7 Back to the Future: C-Style Pseudo-Random Number
Generation 831 26.8 Cryptographic Generators 833 26.9 Matrix Decomposition
Methods 833 26.10 Generating Random Numbers 845 26.11 Summary and
Conclusions 848 26.12 Exercises and Projects 849 CHAPTER 27 Microsoft .Net,
C# and C++11 Interoperability 853 27.1 Introduction and Objectives 853 27.2
The Big Picture 854 27.3 Types 858 27.4 Memory Management 859 27.5 An
Introduction to Native Classes 861 27.6 Interfaces and Abstract Classes 861
27.7 Use Case: C++/CLI as 'Main Language' 862 27.8 Use Case: Creating
Proxies, Adapters and Wrappers for Legacy C++ Applications 864 27.8.1
Alternative: SWIG (Simplified Wrapper and Interface Generator) 871 27.9
'Back to the Future' Use Case: Calling C# Code from C++11 872 27.10
Modelling Event-Driven Applications with Delegates 876 27.11 Use Case:
Interfacing with Legacy Code 886 27.12 Assemblies and Namespaces for
C++/CLI 889 27.13 Summary and Conclusions 895 27.14 Exercises and Projects
896 CHAPTER 28 C++ Concurrency, Part I Threads 899 28.1 Introduction and
Objectives 899 28.2 Thread Fundamentals 900 28.3 Six Ways to Create a
Thread 903 28.4 Intermezzo: Parallelising the Binomial Method 909 28.5
Atomics 916 28.6 Smart Pointers and the Thread-Safe Pointer Interface 924
28.7 Thread Synchronisation 926 28.8 When should we use Threads? 929 28.9
Summary and Conclusions 929 28.10 Exercises and Projects 930 CHAPTER 29 C++
Concurrency, Part II Tasks 935 29.1 Introduction and Objectives 935 29.2
Finding Concurrency: Motivation 936 29.3 Tasks and Task Decomposition 937
29.4 Futures and Promises 941 29.5 Shared Futures 945 29.6 Waiting on Tasks
to Complete 948 29.7 Continuations and Futures in Boost 950 29.8 Pure
Functions 952 29.9 Tasks versus Threads 953 29.10 Parallel Design Patterns
953 29.11 Summary and Conclusions 955 29.12 Quizzes, Exercises and Projects
955 CHAPTER 30 Parallel Patterns Language (PPL) 961 30.1 Introduction and
Objectives 961 30.2 Parallel Algorithms 962 30.3 Partitioning Work 967 30.4
The Aggregation/Reduction Pattern in PPL 971 30.5 Concurrent Containers 977
30.6 An Introduction to the Asynchronous Agents Library and Event-Based
Systems 978 30.7 A Design Plan to Implement a Framework Using Message
Passing and Other Approaches 986 30.8 Summary and Conclusions 989 30.9
Exercises and Projects 990 CHAPTER 31 Monte Carlo Simulation, Part I 993
31.1 Introduction and Objectives 993 31.2 The Boost Parameters Library for
the Impatient 995 31.3 Monte Carlo Version 1: The Monolith Program ('Ball
of Mud') 1000 31.4 Policy-Based Design: Dynamic Polymorphism 1003 31.5
Policy-Based Design Approach: CRTP and Static Polymorphism 1011 31.6
Builders and their Subcontractors (Factory Method Pattern) 1013 31.7
Practical Issue: Structuring the Project Directory and File Contents 1014
31.8 Summary and Conclusions 1016 31.9 Exercises and Projects 1017 CHAPTER
32 Monte Carlo Simulation, Part II 1023 32.1 Introduction and Objectives
1023 32.2 Parallel Processing and Monte Carlo Simulation 1023 32.3 A Family
of Predictor-Corrector Schemes 1033 32.4 An Example (CEV Model) 1038 32.5
Implementing the Monte Carlo Method Using the Asynchronous Agents Library
1041 32.6 Summary and Conclusions 1047 32.7 Exercises and Projects 1050
Appendix 1: Multiple-Precision Arithmetic 1053 Appendix 2: Computing
Implied Volatility 1075 References 1109 Index 1117
1.2 What is C++? 1 1.3 C++ as a Multiparadigm Programming Language 2 1.4
The Structure and Contents of this Book: Overview 4 1.5 A Tour of C++11:
Black-Scholes and Environs 6 1.6 Parallel Programming in C++ and Parallel
C++ Libraries 12 1.7 Writing C++ Applications; Where and How to Start? 14
1.8 For whom is this Book Intended? 16 1.9 Next-Generation Design and
Design Patterns in C++ 16 1.10 Some Useful Guidelines and Developer
Folklore 17 1.11 About the Author 18 1.12 The Source Code and Getting the
Source Code 19 CHAPTER 2 New and Improved C++ Fundamentals 21 2.1
Introduction and Objectives 21 2.2 The C++ Smart Pointers 21 2.3 Using
Smart Pointers in Code 23 2.4 Extended Examples of Smart Pointers Usage 30
2.5 Move Semantics and Rvalue References 34 2.6 Other Bits and Pieces:
Usability Enhancements 39 2.7 Summary and Conclusions 52 2.8 Exercises and
Projects 52 CHAPTER 3 Modelling Functions in C++ 59 3.1 Introduction and
Objectives 59 3.2 Analysing and Classifying Functions 60 3.3 New
Functionality in C++: std::function 64 3.4 New Functionality in C++: Lambda
Functions and Lambda Expressions 65 3.5 Callable Objects 69 3.6 Function
Adapters and Binders 70 3.7 Application Areas 75 3.8 An Example: Strategy
Pattern New Style 75 3.9 Migrating from Traditional Object-Oriented
Solutions: Numerical Quadrature 78 3.10 Summary and Conclusions 81 3.11
Exercises and Projects 82 CHAPTER 4 Advanced C++ Template Programming 89
4.1 Introduction and Objectives 89 4.2 Preliminaries 91 4.3 decltype
Specifier 94 4.4 Life Before and After decltype 101 4.5 std::result_of and
SFINAE 106 4.6 std::enable_if 108 4.7 Boost enable_if 112 4.8
std::decay()Trait 114 4.9 A Small Application: Quantities and Units 115
4.10 Conclusions and Summary 118 4.11 Exercises and Projects 118 CHAPTER 5
Tuples in C++ and their Applications 123 5.1 Introduction and Objectives
123 5.2 An std:pair Refresher and New Extensions 123 5.3 Mathematical and
Computer Science Background 128 5.4 Tuple Fundamentals and Simple Examples
130 5.5 Advanced Tuples 130 5.6 Using Tuples in Code 133 5.7 Other Related
Libraries 138 5.8 Tuples and Run-Time Efficiency 140 5.9 Advantages and
Applications of Tuples 142 5.10 Summary and Conclusions 143 5.11 Exercises
and Projects 143 CHAPTER 6 Type Traits, Advanced Lambdas and Multiparadigm
Design in C++ 147 6.1 Introduction and Objectives 147 6.2 Some Building
Blocks 149 6.3 C++ Type Traits 150 6.4 Initial Examples of Type Traits 158
6.5 Generic Lambdas 161 6.6 How Useful will Generic Lambda Functions be in
the Future? 164 6.7 Generalised Lambda Capture 171 6.7.1 Living Without
Generalised Lambda Capture 173 6.8 Application to Stochastic Differential
Equations 174 6.9 Emerging Multiparadigm Design Patterns: Summary 178 6.10
Summary and Conclusions 179 6.11 Exercises and Projects 179 CHAPTER 7
Multiparadigm Design in C++ 185 7.1 Introduction and Objectives 185 7.2
Modelling and Design 185 7.3 Low-Level C++ Design of Classes 190 7.4 Shades
of Polymorphism 199 7.5 Is there More to Life than Inheritance? 206 7.6 An
Introduction to Object-Oriented Software Metrics 207 7.7 Summary and
Conclusions 210 7.8 Exercises and Projects 210 CHAPTER 8 C++ Numerics, IEEE
754 and Boost C++ Multiprecision 215 8.1 Introduction and Objectives 215
8.2 Floating-Point Decomposition Functions in C++ 219 8.3 A Tour of
std::numeric_limits 221 8.4 An Introduction to Error Analysis 223 8.5
Example: Numerical Quadrature 224 8.6 Other Useful Mathematical Functions
in C++ 228 8.7 Creating C++ Libraries 231 8.8 Summary and Conclusions 239
8.9 Exercises and Projects 239 CHAPTER 9 An Introduction to Unified
Software Design 245 9.1 Introduction and Objectives 245 9.1.1 Future
Predictions and Expectations 246 9.2 Background 247 9.3 System Scoping and
Initial Decomposition 251 9.4 Checklist and Looking Back 259 9.5 Variants
of the Software Process: Policy-Based Design 260 9.6 Using Policy-Based
Design for the DVM Problem 268 9.7 Advantages of Uniform Design Approach
273 9.8 Summary and Conclusions 274 9.9 Exercises and Projects 275 CHAPTER
10 New Data Types, Containers and Algorithms in C++ and Boost C++ Libraries
283 10.1 Introduction and Objectives 283 10.2 Overview of New Features 283
10.3 C++ std::bitset and Boost Dynamic Bitset Library 284 10.4 Chrono
Library 288 10.5 Boost Date and Time 301 10.6 Forwards Lists and
Compile-Time Arrays 306 10.7 Applications of Boost.Array 311 10.8 Boost
uBLAS (Matrix Library) 313 10.9 Vectors 316 10.10 Matrices 318 10.11
Applying uBLAS: Solving Linear Systems of Equations 322 10.12 Summary and
Conclusions 330 10.13 Exercises and Projects 331 CHAPTER 11 Lattice Models
Fundamental Data Structures and Algorithms 333 11.1 Introduction and
Objectives 333 11.2 Background and Current Approaches to Lattice Modelling
334 11.3 New Requirements and Use Cases 335 11.4 A New Design Approach: A
Layered Approach 335 11.5 Initial '101' Examples of Option Pricing 347 11.6
Advantages of Software Layering 349 11.7 Improving Efficiency and
Reliability 352 11.8 Merging Lattices 355 11.9 Summary and Conclusions 357
11.10 Exercises and Projects 357 CHAPTER 12 Lattice Models Applications to
Computational Finance 367 12.1 Introduction and Objectives 367 12.2 Stress
Testing the Lattice Data Structures 368 12.3 Option Pricing Using Bernoulli
Paths 372 12.4 Binomial Model for Assets with Dividends 374 12.5 Computing
Option Sensitivities 377 12.6 (Quick) Numerical Analysis of the Binomial
Method 379 12.7 Richardson Extrapolation with Binomial Lattices 382 12.8
Two-Dimensional Binomial Method 382 12.9 Trinomial Model of the Asset Price
384 12.10 Stability and Convergence of the Trinomial Method 385 12.11
Explicit Finite Difference Method 386 12.12 Summary and Conclusions 389
12.13 Exercises and Projects 389 CHAPTER 13 Numerical Linear Algebra:
Tridiagonal Systems and Applications 395 13.1 Introduction and Objectives
395 13.2 Solving Tridiagonal Matrix Systems 395 13.3 The Crank-Nicolson and
Theta Methods 406 13.4 The ADE Method for the Impatient 411 13.5 Cubic
Spline Interpolation 415 13.6 Some Handy Utilities 427 13.7 Summary and
Conclusions 428 13.8 Exercises and Projects 429 CHAPTER 14 Data
Visualisation in Excel 433 14.1 Introduction and Objectives 433 14.2 The
Structure of Excel-Related Objects 433 14.3 Sanity Check: Is the Excel
Infrastructure Up and Running? 435 14.4 ExcelDriver and Matrices 437 14.5
ExcelDriver and Vectors 444 14.6 Path Generation for Stochastic
Differential Equations 448 14.7 Summary and Conclusions 459 14.8 Exercises
and Projects 459 14.9 Appendix: COM Architecture Overview 463 14.10 An
Example 468 14.11 Virtual Function Tables 471 14.12 Differences between COM
and Object-Oriented Paradigm 473 14.13 Initialising the COM Library 474
CHAPTER 15 Univariate Statistical Distributions 475 15.1 Introduction,
Goals and Objectives 475 15.2 The Error Function and Its Universality 475
15.3 One-Factor Plain Options 478 15.4 Option Sensitivities and Surfaces
488 15.5 Automating Data Generation 491 15.6 Introduction to Statistical
Distributions and Functions 499 15.7 Advanced Distributions 504 15.8
Summary and Conclusions 511 15.9 Exercises and Projects 511 CHAPTER 16
Bivariate Statistical Distributions and Two-Asset Option Pricing 515 16.1
Introduction and Objectives 515 16.2 Computing Integrals Using PDEs 516
16.3 The Drezner Algorithm 521 16.4 The Genz Algorithm and the
West/Quantlib Implementations 521 16.5 Abramowitz and Stegun Approximation
525 16.6 Performance Testing 528 16.7 Gauss-Legendre Integration 529 16.8
Applications to Two-Asset Pricing 531 16.9 Trivariate Normal Distribution
536 16.10 Chooser Options 543 16.11 Conclusions and Summary 545 16.12
Exercises and Projects 546 CHAPTER 17 STL Algorithms in Detail 551 17.1
Introduction and Objectives 551 17.2 Binders and std::bind 554 17.3
Non-modifying Algorithms 557 17.4 Modifying Algorithms 567 17.5
Compile-Time Arrays 575 17.6 Summary and Conclusions 576 17.7 Exercises and
Projects 576 17.8 Appendix: Review of STL Containers and Complexity
Analysis 583 CHAPTER 18 STL Algorithms Part II 589 18.1 Introduction and
Objectives 589 18.2 Mutating Algorithms 589 18.3 Numeric Algorithms 597
18.4 Sorting Algorithms 601 18.5 Sorted-Range Algorithms 604 18.5.5 Merging
608 18.6 Auxiliary Iterator Functions 609 18.7 Needle in a Haystack:
Finding the Right STL Algorithm 612 18.8 Applications to Computational
Finance 613 18.9 Advantages of STL Algorithms 613 18.10 Summary and
Conclusions 614 18.11 Exercises and Projects 614 CHAPTER 19 An Introduction
to Optimisation and the Solution of Nonlinear Equations 617 19.1
Introduction and Objectives 617 19.2 Mathematical and Numerical Background
618 19.3 Sequential Search Methods 619 19.4 Solutions of Nonlinear
Equations 620 19.5 Fixed-Point Iteration 622 19.6 Aitken's Acceleration
Process 623 19.7 Software Framework 623 19.8 Implied Volatility 632 19.9
Solvers in the Boost C++ Libraries 632 19.10 Summary and Conclusions 633
19.11 Exercises and Projects 633 19.12 Appendix: The Banach Fixed-Point
Theorem 636 CHAPTER 20 The Finite Difference Method for PDEs: Mathematical
Background 641 20.1 Introduction and Objectives 641 20.2 General
Convection-Diffusion-Reaction Equations and Black-Scholes PDE 641 20.3 PDE
Preprocessing 64520.3.2 Reduction of PDE to Conservative Form 646 20.4
Maximum Principles for Parabolic PDEs 649 20.5 The Fichera Theory 650 20.6
Finite Difference Schemes: Properties and Requirements 654 20.7 Example: A
Linear Two-Point Boundary Value Problem 655 20.8 Exponentially Fitted
Schemes for Time-Dependent PDEs 659 20.9 Richardson Extrapolation 663 20.10
Summary and Conclusions 665 20.11 Exercises and Projects 666 CHAPTER 21
Software Framework for One-Factor Option Models 669 21.1 Introduction and
Objectives 669 21.2 A Software Framework: Architecture and Context 669 21.3
Modelling PDEs and Finite Difference Schemes: What is Supported? 670 21.4
Several Versions of Alternating Direction Explicit 671 21.5 A Software
Framework: Detailed Design and Implementation 673 21.6 C++ Code for PDE
Classes 674 21.7 C++ Code for FDM Classes 679 21.8 Examples and Test Cases
690 21.9 Summary and Conclusions 693 21.10 Exercises and Projects 694
CHAPTER 22 Extending the Software Framework 701 22.1 Introduction and
Objectives 701 22.2 Spline Interpolation of Option Values 701 22.3
Numerical Differentiation Foundations 704 22.4 Numerical Greeks 710 22.5
Constant Elasticity of Variance Model 715 22.6 Using Software Design (GOF)
Patterns 715 22.7 Multiparadigm Design Patterns 720 22.8 Summary and
Conclusions 721 22.9 Exercises and Projects 721 CHAPTER 23A PDE Software
Framework in C++11 for a Class of Path-Dependent Options 727 23.1
Introduction and Objectives 727 23.2 Modelling PDEs and Initial Boundary
Value Problems in the Functional Programming Style 728 23.3 PDE
Preprocessing 731 23.4 The Anchoring PDE 732 23.5 ADE for Anchoring PDE 739
23.6 Useful Utilities 746 23.7 Accuracy and Performance 748 23.8 Summary
and Conclusions 750 23.9 Exercises and Projects 751 CHAPTER 24 Ordinary
Differential Equations and their Numerical Approximation 755 24.1
Introduction and Objectives 755 24.2 What is an ODE? 755 24.3 Classifying
ODEs 756 24.4 A Palette of Model ODEs 757 24.5 Existence and Uniqueness
Results 760 24.6 Overview of Numerical Methods for ODEs: The Big Picture
763 24.7 Creating ODE Solvers in C++ 770 24.8 Summary and Conclusions 776
24.9 Exercises and Projects 776 24.10 Appendix 778 CHAPTER 25 Advanced
Ordinary Differential Equations and Method of Lines 781 25.1 Introduction
and Objectives 781 25.2 An Introduction to the Boost Odeint Library 782
25.3 Systems of Stiff and Non-stiff Equations 791 25.4 Matrix Differential
Equations 796 25.5 The Method of Lines: What is it and what are its
Advantages? 799 25.6 Initial Foray in Computational Finance: MOL for
One-Factor Black-Scholes PDE 801 25.7 Barrier Options 806 25.8 Using
Exponential Fitting of Barrier Options 808 25.9 Summary and Conclusions 808
25.10 Exercises and Projects 809 CHAPTER 26 Random Number Generation and
Distributions 819 26.1 Introduction and Objectives 819 26.2 What is a
Random Number Generator? 820 26.3 What is a Distribution? 821 26.4 Some
Initial Examples 825 26.5 Engines in Detail 827 26.6 Distributions in C++:
The List 830 26.7 Back to the Future: C-Style Pseudo-Random Number
Generation 831 26.8 Cryptographic Generators 833 26.9 Matrix Decomposition
Methods 833 26.10 Generating Random Numbers 845 26.11 Summary and
Conclusions 848 26.12 Exercises and Projects 849 CHAPTER 27 Microsoft .Net,
C# and C++11 Interoperability 853 27.1 Introduction and Objectives 853 27.2
The Big Picture 854 27.3 Types 858 27.4 Memory Management 859 27.5 An
Introduction to Native Classes 861 27.6 Interfaces and Abstract Classes 861
27.7 Use Case: C++/CLI as 'Main Language' 862 27.8 Use Case: Creating
Proxies, Adapters and Wrappers for Legacy C++ Applications 864 27.8.1
Alternative: SWIG (Simplified Wrapper and Interface Generator) 871 27.9
'Back to the Future' Use Case: Calling C# Code from C++11 872 27.10
Modelling Event-Driven Applications with Delegates 876 27.11 Use Case:
Interfacing with Legacy Code 886 27.12 Assemblies and Namespaces for
C++/CLI 889 27.13 Summary and Conclusions 895 27.14 Exercises and Projects
896 CHAPTER 28 C++ Concurrency, Part I Threads 899 28.1 Introduction and
Objectives 899 28.2 Thread Fundamentals 900 28.3 Six Ways to Create a
Thread 903 28.4 Intermezzo: Parallelising the Binomial Method 909 28.5
Atomics 916 28.6 Smart Pointers and the Thread-Safe Pointer Interface 924
28.7 Thread Synchronisation 926 28.8 When should we use Threads? 929 28.9
Summary and Conclusions 929 28.10 Exercises and Projects 930 CHAPTER 29 C++
Concurrency, Part II Tasks 935 29.1 Introduction and Objectives 935 29.2
Finding Concurrency: Motivation 936 29.3 Tasks and Task Decomposition 937
29.4 Futures and Promises 941 29.5 Shared Futures 945 29.6 Waiting on Tasks
to Complete 948 29.7 Continuations and Futures in Boost 950 29.8 Pure
Functions 952 29.9 Tasks versus Threads 953 29.10 Parallel Design Patterns
953 29.11 Summary and Conclusions 955 29.12 Quizzes, Exercises and Projects
955 CHAPTER 30 Parallel Patterns Language (PPL) 961 30.1 Introduction and
Objectives 961 30.2 Parallel Algorithms 962 30.3 Partitioning Work 967 30.4
The Aggregation/Reduction Pattern in PPL 971 30.5 Concurrent Containers 977
30.6 An Introduction to the Asynchronous Agents Library and Event-Based
Systems 978 30.7 A Design Plan to Implement a Framework Using Message
Passing and Other Approaches 986 30.8 Summary and Conclusions 989 30.9
Exercises and Projects 990 CHAPTER 31 Monte Carlo Simulation, Part I 993
31.1 Introduction and Objectives 993 31.2 The Boost Parameters Library for
the Impatient 995 31.3 Monte Carlo Version 1: The Monolith Program ('Ball
of Mud') 1000 31.4 Policy-Based Design: Dynamic Polymorphism 1003 31.5
Policy-Based Design Approach: CRTP and Static Polymorphism 1011 31.6
Builders and their Subcontractors (Factory Method Pattern) 1013 31.7
Practical Issue: Structuring the Project Directory and File Contents 1014
31.8 Summary and Conclusions 1016 31.9 Exercises and Projects 1017 CHAPTER
32 Monte Carlo Simulation, Part II 1023 32.1 Introduction and Objectives
1023 32.2 Parallel Processing and Monte Carlo Simulation 1023 32.3 A Family
of Predictor-Corrector Schemes 1033 32.4 An Example (CEV Model) 1038 32.5
Implementing the Monte Carlo Method Using the Asynchronous Agents Library
1041 32.6 Summary and Conclusions 1047 32.7 Exercises and Projects 1050
Appendix 1: Multiple-Precision Arithmetic 1053 Appendix 2: Computing
Implied Volatility 1075 References 1109 Index 1117