OPT_COMPLEX_CHOOSER Function (Gnumeric)
Value a complex chooser option in Gnumeric with OPT_COMPLEX_CHOOSER, distinct strikes and maturities, native examples and a disclosed approximation discrepancy.
Verification status: Two isolated native 1.12.57 cases; independent convergence checks; observed approximation discrepancy explicitly disclosed. No GUI. How formula examples are checked
OPT_COMPLEX_CHOOSER values a contract in which the holder chooses, at a future decision date, between a call and a put. The call and put may have different strikes and expiry dates. The choice compares their continuation values at the decision date, not just their immediate intrinsic payoffs. The output is a theoretical present value in the spot-price currency units, not a trading recommendation or a calibrated market quote.
Exact syntax and arguments
=OPT_COMPLEX_CHOOSER(spot,strike_call,strike_put,time,time_call,time_put,rate,carry,volatility)
All nine arguments are required. There is no call/put flag because the holder has the right to choose either leg.
- Spot is today’s positive underlying-asset price.
- Strike_call and strike_put are the respective positive exercise prices.
- Time is the time from today to the decision date, in years.
- Time_call and time_put are times from today to each leg’s expiry, not intervals measured from the decision date.
- Rate is the annual continuously compounded risk-free rate.
- Carry is the net annual cost of holding the asset, often rate less dividend yield.
- Volatility is annualized standard deviation, entered as a fraction.
Use positive volatility and 0 < time < MIN(time_call,time_put) for the nonsingular setup considered here. For example, rate 0.05 means 5%, and time 0.25 means a quarter of a year.
Worked example: matching call and put terms
=OPT_COMPLEX_CHOOSER(100,100,100,0.25,1,1,0.05,0.05,0.2)
Gnumeric 1.12.57 returned 12.378483731079104. An independent discounted-payoff integration returned 12.378483731079122. Spot and both strikes are 100; the choice is made after three months, and either selected option expires one year from today. Agreement in this symmetric example does not establish a general accuracy bound.
The independent check models the asset price at the decision date with a lognormal distribution. At each possible decision-date spot, it calculates the remaining-life Black–Scholes call and put values, takes the larger, and discounts the expected value back to today. The integration is split at the independently bracketed spot where call and put continuation values agree, approximately 96.31944177208219 here.
Different strikes and maturities: disclose the numerical difference
=OPT_COMPLEX_CHOOSER(100,105,95,0.25,1,1.25,0.05,0.05,0.2)
The actual native result is 9.527102309104334. Independent payoff integration gives 9.527112477722293, so the observed native-minus-reference difference is approximately -0.000010168617959, or -1.01686e-5 price units. These results must not be described as exact agreement.
The reference calculation was checked with normal integration bounds of 8, 10 and 12 standard deviations and progressively tighter quadrature settings. Results stabilized from 9.527112477722184 to 9.527112477722293. A separate deterministic conditional-normal integration for the bivariate CDF gives 9.527112477722296 when substituted into the option formula. These are convergence checks for this example, not proof of accuracy for every parameter set.
Why this discrepancy occurs in the inspected implementation
The pinned 1.12.57 source uses a five-by-five quadrature approximation for the bivariate normal CDF. Separately reproducing that source approximation and its decision threshold gives 9.527102309104336, matching the native output to displayed precision. Substituting the source’s approximate decision threshold into the more accurate CDF calculation changes this example’s price by only about 5.6e-13. The evidence therefore attributes this particular difference to the CDF approximation, rather than the decision-threshold stopping condition.
The source reproduction explains the native result; it is not an independent accuracy reference. No universal error tolerance, number of correct digits or newer-version behavior is established by these two cases.
Advanced use and numerical safety
Keep native prices and independent reference prices in separate columns when evaluating a chooser model. Record the two strikes, decision time and both maturity times explicitly so that a leg’s remaining life is not confused with its total time from today. With unequal terms, the critical decision spot changes; do not reuse the symmetric example’s threshold.
The internal Newton iteration stops when the call-minus-put continuation-value residual is at most 0.001 in absolute value. That is a solver residual criterion, not a guaranteed option-price error bound. The inspected loop has no explicit iteration-count cap. The two recorded cases were each run in a separate bounded process and completed normally; that does not guarantee convergence or runtime for arbitrary inputs. Invalid, singular or extreme cases were deliberately not executed. Do not depend on a friendly worksheet error to make an invalid option model safe.
Version and portability scope
The original introduction and last functioning release are unestablished. This guide’s source inspection and native execution concern Gnumeric 1.12.57 only. Two bounded native records were captured on 17 October 2026; their workbook formulas, results and hashes were independently checked. No additional native rerun, GUI screenshot or other-version guarantee is claimed. Other spreadsheets or libraries may lack this exact function or use different algorithms and time conventions; independently validate any transferred model.