forked from QianMo/GPU-Gems-Book-Source-Code
-
Notifications
You must be signed in to change notification settings - Fork 0
/
binomialprice.h
55 lines (49 loc) · 2.16 KB
/
binomialprice.h
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
/*********************************************************************NVMH3****
Copyright NVIDIA Corporation 2004
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR
CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR
LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR
INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
****************************************************************************/
#ifndef _BINOMIALPRICE_H_
#define _BINOMIALPRICE_H_
#include "options.h"
class BinomialPricing : public OptionPricing {
public:
BinomialPricing(OptionStyle ostyle, OptionType otype, int nopts, int nsteps);
~BinomialPricing();
const char *GetName(void) { return "Binomial"; }
bool CPUPrice(OptionParams ¶ms, float *buf);
bool GPUPrice(OptionParams ¶ms, float *buf);
private:
float EuropeanPut(float S, float X, float T, float r, float v,
float Pu, float Pd, float u);
float EuropeanCall(float S, float X, float T, float r, float v,
float Pu, float Pd, float u);
float AmericanPut(float S, float X, float T, float r, float v,
float Pu, float Pd, float u);
float AmericanCall(float S, float X, float T, float r, float v,
float Pu, float Pd, float u);
void setNumSteps(int n);
int numSteps;
int numOpts;
void initProbData(OptionParams ¶ms);
int width, height;
PUGBuffer *resultBuf;
PUGBuffer *priceBuf;
PUGBuffer *strikeBuf;
PUGBuffer *yearsBuf;
PUGBuffer *volBuf;
PUGProgram *prog;
PUGProgram *iprog;
PUGBuffer *puBuf, *pdBuf, *uBuf;
float *pudata, *pddata, *udata;
float *value;
};
#endif // _BINOMIALPRICE_H_