+1
This commit is contained in:
@@ -45,9 +45,9 @@
|
||||
__device__
|
||||
static inline float
|
||||
CND(float X) {
|
||||
float L = abs(X);
|
||||
float L = fabsf(X);
|
||||
|
||||
float k = 1.0 / (1.0 + 0.2316419 * L);
|
||||
float k = 1.0f / (1.0f + 0.2316419f * L);
|
||||
float k2 = k*k;
|
||||
float k3 = k2*k;
|
||||
float k4 = k2*k2;
|
||||
@@ -56,10 +56,10 @@ CND(float X) {
|
||||
const float invSqrt2Pi = 0.39894228040f;
|
||||
float w = (0.31938153f * k - 0.356563782f * k2 + 1.781477937f * k3 +
|
||||
-1.821255978f * k4 + 1.330274429f * k5);
|
||||
w *= invSqrt2Pi * exp(-L * L * .5f);
|
||||
w *= invSqrt2Pi * expf(-L * L * .5f);
|
||||
|
||||
if (X > 0.f)
|
||||
w = 1.0 - w;
|
||||
w = 1.0f - w;
|
||||
return w;
|
||||
}
|
||||
|
||||
@@ -75,10 +75,10 @@ void bs_task( float Sa[], float Xa[], float Ta[],
|
||||
{
|
||||
float S = Sa[i], X = Xa[i], T = Ta[i], r = ra[i], v = va[i];
|
||||
|
||||
float d1 = (log(S/X) + (r + v * v * .5f) * T) / (v * sqrt(T));
|
||||
float d2 = d1 - v * sqrt(T);
|
||||
float d1 = (logf(S/X) + (r + v * v * .5f) * T) / (v * sqrtf(T));
|
||||
float d2 = d1 - v * sqrtf(T);
|
||||
|
||||
result[i] = S * CND(d1) - X * exp(-r * T) * CND(d2);
|
||||
result[i] = S * CND(d1) - X * expf(-r * T) * CND(d2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ binomial_put(float S, float X, float T, float r, float v) {
|
||||
|
||||
float dt = T / BINOMIAL_NUM;
|
||||
float u = exp(v * sqrt(dt));
|
||||
float d = 1. / u;
|
||||
float d = 1.f / u;
|
||||
float disc = exp(r * dt);
|
||||
float Pu = (disc - d) / (u - d);
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ int main(int argc, char *argv[]) {
|
||||
void *func_args[] = {&d_S, &d_X, &d_T, &d_r, &d_v, &d_result, &nOptions};
|
||||
double dt = CUDALaunch(NULL, func_name, func_args, print_log, nreg);
|
||||
dt *= 1e3;
|
||||
memcpyD2H(result, d_result, nOptions*sizeof(float));
|
||||
sum = 0.;
|
||||
for (int i = 0; i < nOptions; ++i)
|
||||
sum += result[i];
|
||||
@@ -133,6 +134,7 @@ int main(int argc, char *argv[]) {
|
||||
void *func_args[] = {&d_S, &d_X, &d_T, &d_r, &d_v, &d_result, &nOptions};
|
||||
double dt = CUDALaunch(NULL, func_name, func_args, print_log, nreg);
|
||||
dt *= 1e3;
|
||||
memcpyD2H(result, d_result, nOptions*sizeof(float));
|
||||
sum = 0.;
|
||||
for (int i = 0; i < nOptions; ++i)
|
||||
sum += result[i];
|
||||
@@ -152,6 +154,7 @@ int main(int argc, char *argv[]) {
|
||||
void *func_args[] = {&d_S, &d_X, &d_T, &d_r, &d_v, &d_result, &nOptions};
|
||||
double dt = CUDALaunch(NULL, func_name, func_args, print_log, nreg);
|
||||
dt *= 1e3;
|
||||
memcpyD2H(result, d_result, nOptions*sizeof(float));
|
||||
sum = 0.;
|
||||
for (int i = 0; i < nOptions; ++i)
|
||||
sum += result[i];
|
||||
@@ -171,6 +174,7 @@ int main(int argc, char *argv[]) {
|
||||
void *func_args[] = {&d_S, &d_X, &d_T, &d_r, &d_v, &d_result, &nOptions};
|
||||
double dt = CUDALaunch(NULL, func_name, func_args, print_log, nreg);
|
||||
dt *= 1e3;
|
||||
memcpyD2H(result, d_result, nOptions*sizeof(float));
|
||||
sum = 0.;
|
||||
for (int i = 0; i < nOptions; ++i)
|
||||
sum += result[i];
|
||||
|
||||
Reference in New Issue
Block a user