The model
d₁ = [ ln(S/K) + (r − q + σ²/2)·T ] ÷ (σ·√T)
d₂ = d₁ − σ·√T
Call = S·e^(−qT)·N(d₁) − K·e^(−rT)·N(d₂)
Put = K·e^(−rT)·N(−d₂) − S·e^(−qT)·N(−d₁)
Five inputs: spot, strike, time, volatility, and the two rates — risk-free and dividend yield. N() is the cumulative normal distribution.
A $100 stock, a $100 strike, 30 days out, 35% implied volatility and a 4% risk-free rate gives a call worth about $4.16 and a put about $3.83.
Why the dividend yield is not optional here
Most free calculators omit it, and the omission runs one way: it overprices calls and underprices puts.
The reasoning is straightforward. A dividend transfers value out of the share, so the expected forward price is lower than the spot compounded at the risk-free rate. A call on a stock that pays 4% a year is worth meaningfully less than a call on an identical non-payer, and the gap grows with time to expiry.
For an index option, use the index's yield rather than zero. For a non-payer, zero is correct. Leaving it at zero for a 3% yielder is the most common quiet error in retail option pricing.
The parity row, and what it is for
Put-call parity is an arbitrage identity, not a model assumption:
C − P = S·e^(−qT) − K·e^(−rT)
It must hold exactly. The calculator shows the residual, and it should read as zero. That row exists as a self-check: if a sign or a discount factor were wrong anywhere in the implementation, parity would break and you would see it, instead of receiving a plausible price that is quietly wrong.
It is also useful on real chains. When a broker's quoted call and put visibly violate parity, the cause is nearly always a stale quote on one leg, a hard-to-borrow stock, or an early-exercise premium — not free money.
Where the model is wrong, and it matters
Volatility is not constant. Every strike on a real chain trades at its own implied volatility — the skew. Feeding an at-the-money IV to price a far out-of-the-money strike returns the value of an option nobody is trading. Use the strike's own IV.
Exercise is European. American calls on non-dividend payers are equivalent, so no error there. American puts, and calls on dividend payers before an ex-date, can be worth exercising early, and the model does not price that.
N(d₂) is not quite the real-world probability. The row labelled "chance of finishing in the money" is the risk-neutral probability, which is what the model uses to price. It is a good rough guide and it is not a forecast.