40 { 60.11, 65.11, 0.31, 0.25, 0.08 },
41 { 60.22, 65.22, 0.32, 0.35, 0.07 },
42 { 60.33, 65.33, 0.33, 0.45, 0.06 },
43 { 60.44, 65.44, 0.34, 0.55, 0.05 },
44 { 60.55, 65.55, 0.35, 0.65, 0.04 },
45 { 60.66, 65.66, 0.36, 0.75, 0.03 },
46 { 60.77, 65.77, 0.37, 0.85, 0.08 },
47 { 60.88, 65.88, 0.38, 0.95, 0.07 },
48 { 60.11, 65.11, 0.31, 0.25, 0.06 },
49 { 60.22, 65.22, 0.32, 0.35, 0.05 },
50 { 60.33, 65.33, 0.33, 0.45, 0.04 },
51 { 60.44, 65.44, 0.34, 0.55, 0.03 },
52 { 60.55, 65.55, 0.35, 0.65, 0.08 },
53 { 60.66, 65.66, 0.36, 0.75, 0.07 },
54 { 60.77, 65.77, 0.37, 0.85, 0.06 },
55 { 60.88, 65.88, 0.38, 0.95, 0.05 }
89 const std::string bsm_model_program =
90 " var d1 := (log(s / k) + (r + v^2 / 2) * t) / (v * sqrt(t)); "
91 " var d2 := d1 - v * sqrt(t); "
93 " if (callput_flag == 'call') "
94 " s * ncdf(d1) - k * e^(-r * t) * ncdf(d2); "
95 " else if (callput_flag == 'put') "
96 " k * e^(-r * t) * ncdf(-d2) - s * ncdf(-d1); "
99 const std::string bsm_model_program_opt1 =
100 " var v_sqrtt := (v * sqrt(t)); "
101 " var d1 := (log(s / k) + (r + v * v / 2) * t) / v_sqrtt; "
102 " var d2 := d1 - v_sqrtt; "
103 " var kert := k * exp(-r * t); "
105 " if (callput_flag == 'call') "
106 " s * ncdf(d1) - kert * ncdf(d2); "
107 " else if (callput_flag == 'put') "
108 " kert * ncdf(-d2) - s * ncdf(-d1); "
111 const std::string bsm_model_program_opt2 =
112 " var v_sqrtt := (v * sqrt(t)); "
113 " var d1 := (log(s / k) + (r + v * v / 2) * t) / v_sqrtt; "
114 " var d2 := d1 - v_sqrtt; "
116 " if (callput_flag == 'call') "
117 " s * ncdf(d1) - (k * exp(-r * t)) * ncdf(d2); "
118 " else if (callput_flag == 'put') "
119 " (k * exp(-r * t)) * ncdf(-d2) - s * ncdf(-d1); "
122 const std::string bsm_model_program_opt3 =
123 " if (callput_flag == 'call') "
124 " call_bsm_model(s, k, t, r, v); "
125 " else if (callput_flag == 'put') "
126 " put_bsm_model(s, k, t, r, v); "
131 std::string callput_flag;
164 for (std::size_t i = 0; i <
rounds; ++i)
168 parameters = current_parameters;
170 callput_flag =
"call";
171 total += bsm_expression.value();
173 callput_flag =
"put";
174 total += bsm_expression.value();
179 printf(
"[exprtk0] Total: %13.5f Time:%6.3fsec Rate:%13.3fbsm/sec execrt: %6.3fns\n",
192 for (std::size_t i = 0; i <
rounds; ++i)
196 parameters = current_parameters;
198 callput_flag =
"call";
199 total += bsm_expression_opt1.value();
201 callput_flag =
"put";
202 total += bsm_expression_opt1.value();
207 printf(
"[exprtk1] Total: %13.5f Time:%6.3fsec Rate:%13.3fbsm/sec execrt: %6.3fns\n",
220 for (std::size_t i = 0; i <
rounds; ++i)
224 parameters = current_parameters;
226 callput_flag =
"call";
227 total += bsm_expression_opt2.value();
229 callput_flag =
"put";
230 total += bsm_expression_opt2.value();
235 printf(
"[exprtk2] Total: %13.5f Time:%6.3fsec Rate:%13.3fbsm/sec execrt: %6.3fns\n",
248 for (std::size_t i = 0; i <
rounds; ++i)
252 parameters = current_parameters;
254 callput_flag =
"call";
255 total += bsm_expression_opt3.value();
257 callput_flag =
"put";
258 total += bsm_expression_opt3.value();
263 printf(
"[exprtk3] Total: %13.5f Time:%6.3fsec Rate:%13.3fbsm/sec execrt: %6.3fns\n",