Value is an estimate: discounting, growth and the margin of safety

quant finance

On this page
  1. A dollar later is worth less than a dollar now
  2. A stream of payments
  3. A discounted cash flow, and where the answer lives
  4. Book value is accounting, not value
  5. Being right about value is not a good trade
  6. Traps
  7. The code
  8. Summary
  9. References

Every valuation is the same calculation: list the cash a thing will pay in the future, and pull each payment back to today. The whole art is in two guesses, and this post is mostly about how much those guesses move the answer.

the estimated valuethe discount rate, the price of waitingthe cash received

A dollar later is worth less than a dollar now

Because a dollar now can earn interest. If money earns rr a year, then $100 today becomes 100(1+r)100(1 + r) in a year, so $100 due in a year is worth 100/(1+r)100 / (1 + r) today. To bring a payment nn years away back to today, divide by (1+r)(1 + r) once per year:

PV=FV(1+r)n\key{PV} = \frac{\good{FV}}{(1 + \risk{r})^n}
CaseWorkingValue today
$121 in 2 years at 10%121 / 1.21$100.00
the same at 12%121 / 1.2544$96.46
$10,000 in 1 year at 10%10,000 / 1.10$9,090.91
$10,000 in 2 years at 10%10,000 / 1.21$8,264.46
$1 in 50 years at 8%1 / 46.9$0.02

A higher discount rate means a lower value today: the second row is the first row with the rate two points higher, and it shaved 3.5%. The last row is why distant cash barely matters: fifty years out at 8%, a dollar is two cents.

{"panels":[{"x0":55.16,"x1":565.2,"y0":29.16,"y1":220.21,"title":"1. What 100 dollars in each future year is worth today, at three discount rates","xlabel":"Years from now","ylabel":"Value today of 100 dollars (dollars)","xlog":false},{"x0":55.16,"x1":565.2,"y0":308.89,"y1":499.94,"title":"2. Gordon growth: the price of a 2 dollar dividend explodes as growth approaches the discount rate","xlabel":"Long-run dividend growth (% a year), discount rate fixed at 10%","ylabel":"Price (dollars)","xlog":false},{"x0":55.16,"x1":565.2,"y0":588.62,"y1":779.68,"title":"3. A five-year DCF: the answer against the two guesses that drive it","xlabel":"Discount rate (% a year)","ylabel":"Value today (dollars; the base case is 1,816)","xlog":false}],"series":[{"panel":0,"label":"discount rate 5%","color":"var(--chart-green, #3f8f45)","x":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0],"y":[100.0,95.2381,90.7029,86.3838,82.2702,78.3526,74.6215,71.0681,67.6839,64.4609,61.3913,58.4679,55.6837,53.0321,50.5068,48.1017,45.8112,43.6297,41.5521,39.5734,37.6889,35.8942,34.185,32.5571,31.0068,29.5303,28.1241,26.7848,25.5094,24.2946,23.1377],"sx":[78.35,93.8,109.26,124.71,140.17,155.62,171.08,186.54,201.99,217.45,232.9,248.36,263.81,279.27,294.73,310.18,325.64,341.09,356.55,372.0,387.46,402.92,418.37,433.83,449.28,464.74,480.19,495.65,511.11,526.56,542.02],"sy":[37.84,46.24,54.24,61.85,69.11,76.02,82.6,88.86,94.83,100.51,105.93,111.08,115.99,120.67,125.12,129.36,133.4,137.25,140.91,144.4,147.73,150.89,153.91,156.78,159.51,162.11,164.59,166.96,169.2,171.35,173.39]},{"panel":0,"label":"discount rate 10%","color":"var(--chart-maroon, #b6262c)","x":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0],"y":[100.0,90.9091,82.6446,75.1315,68.3013,62.0921,56.4474,51.3158,46.6507,42.4098,38.5543,35.0494,31.8631,28.9664,26.3331,23.9392,21.7629,19.7845,17.9859,16.3508,14.8644,13.5131,12.2846,11.1678,10.1526,9.2296,8.39055,7.62777,6.93433,6.30394,5.73086],"sx":[78.35,93.8,109.26,124.71,140.17,155.62,171.08,186.54,201.99,217.45,232.9,248.36,263.81,279.27,294.73,310.18,325.64,341.09,356.55,372.0,387.46,402.92,418.37,433.83,449.28,464.74,480.19,495.65,511.11,526.56,542.02],"sy":[37.84,53.87,68.45,81.7,93.74,104.69,114.65,123.7,131.92,139.4,146.2,152.38,158.0,163.11,167.75,171.97,175.81,179.3,182.47,185.36,187.98,190.36,192.53,194.5,196.29,197.91,199.39,200.74,201.96,203.07,204.08]},{"panel":0,"label":"discount rate 15%","color":"var(--chart-blue, #3b6ea5)","x":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0],"y":[100.0,86.9565,75.6144,65.7516,57.1753,49.7177,43.2328,37.5937,32.6902,28.4262,24.7185,21.4943,18.6907,16.2528,14.1329,12.2894,10.6865,9.29259,8.08051,7.02653,6.11003,5.31307,4.62006,4.01744,3.49343,3.03776,2.64153,2.29699,1.99738,1.73685,1.51031],"sx":[78.35,93.8,109.26,124.71,140.17,155.62,171.08,186.54,201.99,217.45,232.9,248.36,263.81,279.27,294.73,310.18,325.64,341.09,356.55,372.0,387.46,402.92,418.37,433.83,449.28,464.74,480.19,495.65,511.11,526.56,542.02],"sy":[37.84,60.84,80.85,98.24,113.36,126.51,137.95,147.89,156.54,164.06,170.6,176.29,181.23,185.53,189.27,192.52,195.34,197.8,199.94,201.8,203.42,204.82,206.04,207.11,208.03,208.83,209.53,210.14,210.67,211.13,211.53]},{"panel":1,"label":"price = 2 / (10% \u2212 growth)","color":"var(--chart-maroon, #b6262c)","x":[0.0,0.0477387,0.0954774,0.143216,0.190955,0.238693,0.286432,0.334171,0.38191,0.429648,0.477387,0.525126,0.572864,0.620603,0.668342,0.71608,0.763819,0.811558,0.859296,0.907035,0.954774,1.00251,1.05025,1.09799,1.14573,1.19347,1.24121,1.28894,1.33668,1.38442,1.43216,1.4799,1.52764,1.57538,1.62312,1.67085,1.71859,1.76633,1.81407,1.86181,1.90955,1.95729,2.00503,2.05276,2.1005,2.14824,2.19598,2.24372,2.29146,2.3392,2.38693,2.43467,2.48241,2.53015,2.57789,2.62563,2.67337,2.72111,2.76884,2.81658,2.86432,2.91206,2.9598,3.00754,3.05528,3.10302,3.15075,3.19849,3.24623,3.29397,3.34171,3.38945,3.43719,3.48492,3.53266,3.5804,3.62814,3.67588,3.72362,3.77136,3.8191,3.86683,3.91457,3.96231,4.01005,4.05779,4.10553,4.15327,4.20101,4.24874,4.29648,4.34422,4.39196,4.4397,4.48744,4.53518,4.58291,4.63065,4.67839,4.72613,4.77387,4.82161,4.86935,4.91709,4.96482,5.01256,5.0603,5.10804,5.15578,5.20352,5.25126,5.29899,5.34673,5.39447,5.44221,5.48995,5.53769,5.58543,5.63317,5.6809,5.72864,5.77638,5.82412,5.87186,5.9196,5.96734,6.01508,6.06281,6.11055,6.15829,6.20603,6.25377,6.30151,6.34925,6.39698,6.44472,6.49246,6.5402,6.58794,6.63568,6.68342,6.73116,6.77889,6.82663,6.87437,6.92211,6.96985,7.01759,7.06533,7.11307,7.1608,7.20854,7.25628,7.30402,7.35176,7.3995,7.44724,7.49497,7.54271,7.59045,7.63819,7.68593,7.73367,7.78141,7.82915,7.87688,7.92462,7.97236,8.0201,8.06784,8.11558,8.16332,8.21106,8.25879,8.30653,8.35427,8.40201,8.44975,8.49749,8.54523,8.59296,8.6407,8.68844,8.73618,8.78392,8.83166,8.8794,8.92714,8.97487,9.02261,9.07035,9.11809,9.16583,9.21357,9.26131,9.30905,9.35678,9.40452,9.45226,9.5],"y":[20.0,20.0959,20.1928,20.2906,20.3893,20.4891,20.5898,20.6914,20.7941,20.8979,21.0026,21.1085,21.2154,21.3233,21.4324,21.5426,21.654,21.7665,21.8802,21.995,22.1111,22.2284,22.347,22.4668,22.588,22.7104,22.8342,22.9593,23.0858,23.2138,23.3431,23.4739,23.6062,23.7399,23.8752,24.0121,24.1505,24.2905,24.4322,24.5755,24.7205,24.8672,25.0157,25.166,25.3181,25.472,25.6278,25.7856,25.9452,26.1069,26.2706,26.4364,26.6043,26.7743,26.9465,27.121,27.2977,27.4767,27.6581,27.8419,28.0282,28.2169,28.4083,28.6022,28.7988,28.9982,29.2003,29.4052,29.6131,29.8239,30.0377,30.2547,30.4747,30.698,30.9246,31.1546,31.388,31.625,31.8655,32.1097,32.3577,32.6096,32.8654,33.1253,33.3893,33.6575,33.9301,34.2071,34.4887,34.775,35.0661,35.3621,35.6631,35.9693,36.2808,36.5977,36.9202,37.2485,37.5826,37.9228,38.2692,38.622,38.9814,39.3475,39.7206,40.1008,40.4883,40.8834,41.2863,41.6972,42.1164,42.5441,42.9806,43.4261,43.8809,44.3454,44.8198,45.3045,45.7998,46.306,46.8235,47.3528,47.8941,48.448,49.0148,49.595,50.1892,50.7977,51.4212,52.0602,52.7152,53.387,54.0761,54.7832,55.5091,56.2544,57.0201,57.8068,58.6156,59.4473,60.303,61.1837,62.0905,63.0245,63.9871,64.9796,66.0033,67.0598,68.1507,69.2776,70.4425,71.6472,72.8938,74.1845,75.5218,76.9082,78.3465,79.8395,81.3906,83.0031,84.6809,86.4278,88.2483,90.1472,92.1296,94.2012,96.368,98.6369,101.015,103.511,106.133,108.892,111.798,114.863,118.101,121.527,125.157,129.011,133.11,137.478,142.143,147.135,152.49,158.25,164.463,171.183,178.475,186.417,195.098,204.627,215.135,226.781,239.759,254.313,270.748,289.455,310.937,335.865,365.138,400.0],"sx":[78.35,80.68,83.01,85.34,87.67,90.0,92.33,94.66,96.99,99.32,101.65,103.98,106.31,108.64,110.97,113.3,115.63,117.96,120.29,122.62,124.95,127.28,129.61,131.94,134.27,136.6,138.93,141.26,143.59,145.92,148.25,150.58,152.91,155.24,157.57,159.9,162.23,164.56,166.89,169.22,171.55,173.88,176.21,178.54,180.87,183.2,185.53,187.86,190.19,192.52,194.85,197.18,199.51,201.84,204.17,206.5,208.83,211.16,213.49,215.82,218.15,220.48,222.81,225.14,227.47,229.8,232.13,234.46,236.79,239.12,241.45,243.78,246.11,248.44,250.77,253.1,255.43,257.76,260.09,262.42,264.75,267.08,269.41,271.74,274.07,276.4,278.73,281.06,283.39,285.72,288.05,290.38,292.71,295.04,297.37,299.7,302.03,304.36,306.69,309.02,311.35,313.68,316.01,318.34,320.67,323.0,325.33,327.66,329.99,332.32,334.65,336.98,339.31,341.64,343.97,346.3,348.63,350.96,353.29,355.62,357.95,360.28,362.61,364.94,367.27,369.6,371.93,374.26,376.59,378.92,381.25,383.58,385.91,388.24,390.57,392.9,395.23,397.56,399.89,402.22,404.55,406.88,409.21,411.54,413.87,416.2,418.53,420.86,423.19,425.52,427.85,430.18,432.51,434.84,437.17,439.5,441.83,444.16,446.49,448.82,451.15,453.48,455.81,458.14,460.47,462.8,465.13,467.46,469.79,472.12,474.45,476.78,479.11,481.44,483.77,486.1,488.43,490.76,493.09,495.42,497.75,500.08,502.41,504.74,507.07,509.4,511.73,514.06,516.39,518.72,521.05,523.38,525.71,528.04,530.37,532.7,535.03,537.36,539.69,542.02],"sy":[480.84,480.75,480.65,480.56,480.47,480.37,480.28,480.18,480.08,479.98,479.88,479.78,479.68,479.57,479.47,479.37,479.26,479.15,479.04,478.93,478.82,478.71,478.6,478.48,478.37,478.25,478.13,478.01,477.89,477.77,477.65,477.52,477.39,477.27,477.14,477.01,476.87,476.74,476.61,476.47,476.33,476.19,476.05,475.9,475.76,475.61,475.46,475.31,475.16,475.01,474.85,474.69,474.53,474.37,474.2,474.04,473.87,473.7,473.52,473.35,473.17,472.99,472.81,472.62,472.43,472.24,472.05,471.85,471.66,471.45,471.25,471.04,470.83,470.62,470.4,470.18,469.96,469.73,469.5,469.27,469.03,468.79,468.55,468.3,468.05,467.79,467.53,467.27,467.0,466.72,466.45,466.16,465.88,465.58,465.29,464.98,464.68,464.36,464.04,463.72,463.39,463.05,462.71,462.36,462.0,461.64,461.27,460.89,460.5,460.11,459.71,459.3,458.89,458.46,458.03,457.58,457.13,456.67,456.19,455.71,455.22,454.71,454.19,453.66,453.12,452.57,452.0,451.42,450.82,450.21,449.59,448.95,448.29,447.61,446.92,446.21,445.47,444.72,443.95,443.16,442.34,441.5,440.63,439.74,438.82,437.87,436.89,435.88,434.84,433.77,432.65,431.5,430.31,429.08,427.8,426.48,425.1,423.68,422.19,420.65,419.05,417.38,415.64,413.83,411.94,409.96,407.89,405.72,403.45,401.06,398.56,395.92,393.15,390.22,387.13,383.85,380.39,376.7,372.79,368.62,364.16,359.39,354.28,348.77,342.84,336.42,329.45,321.87,313.57,304.47,294.43,283.31,270.91,257.01,241.31,223.44,202.92,179.1,151.14,117.84]},{"panel":1,"label":"growth 4%: 33.33","color":"var(--chart-blue, #3b6ea5)","x":[4.0],"y":[33.3333],"sx":[273.58],"sy":[468.1]},{"panel":2,"label":"long-run growth 0%","color":"var(--chart-grey, #a3a19c)","x":[7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0],"y":[2010.78,1750.0,1547.48,1385.72,1253.6,1143.69,1050.87,971.466],"sx":[78.35,144.58,210.82,277.06,343.3,409.54,475.78,542.02],"sy":[735.2,744.18,751.15,756.73,761.28,765.06,768.26,770.99]},{"panel":2,"label":"long-run growth 2%","color":"var(--chart-blue, #3b6ea5)","x":[7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0],"y":[2651.32,2200.0,1877.92,1636.61,1449.13,1299.32,1176.91,1075.03],"sx":[78.35,144.58,210.82,277.06,343.3,409.54,475.78,542.02],"sy":[713.13,728.68,739.77,748.08,754.54,759.7,763.92,767.43]},{"panel":2,"label":"long-run growth 3%","color":"var(--chart-maroon, #b6262c)","x":[7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0],"y":[3211.79,2560.0,2125.76,1815.82,1583.56,1403.08,1258.83,1140.94],"sx":[78.35,144.58,210.82,277.06,343.3,409.54,475.78,542.02],"sy":[693.83,716.28,731.24,741.91,749.91,756.13,761.1,765.16]},{"panel":2,"label":"long-run growth 5%","color":"var(--chart-amber, #c0781a)","x":[7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0],"y":[6014.15,4000.0,2993.18,2389.29,1986.85,1699.52,1484.13,1316.69],"sx":[78.35,144.58,210.82,277.06,343.3,409.54,475.78,542.02],"sy":[597.31,666.68,701.36,722.16,736.02,745.92,753.34,759.1]}]} 2026-10-16T00:09:37.194867 image/svg+xml Matplotlib v3.11.2, https://matplotlib.org/ 0 5 10 15 20 25 30 Years from now 0 20 40 60 80 100 Value today of 100 dollars (dollars) 1. What 100 dollars in each future year is worth today, at three discount rates discount rate 5% discount rate 10% discount rate 15% 0 2 4 6 8 Long-run dividend growth (% a year), discount rate fixed at 10% 0 25 50 75 100 125 150 175 200 Price (dollars) 2. Gordon growth: the price of a 2 dollar dividend explodes as growth approaches the discount rate price = 2 / (10% − growth) growth 4%: 33.33 7 8 9 10 11 12 13 14 Discount rate (% a year) 1000 2000 3000 4000 5000 6000 Value today (dollars; the base case is 1,816) 3. A five-year DCF: the answer against the two guesses that drive it long-run growth 0% long-run growth 2% long-run growth 3% long-run growth 5%

The discount rate is what the money could earn elsewhere at similar risk: a broad index fund for a stock, a government bond for something safe. Pick it too low and everything looks cheap.

A stream of payments

A stock is a stream of dividends. Add up the present value of each:

StreamWorkingValue today
$1 a year for 10 years at 8%sum of 1 / 1.08ᵏ$6.71
$1 a year forever at 8%1 / 0.08$12.50

The forever case has a one-line answer, D/rD / r, and it is the limit of the ten-year sum as the years pile up: the payments beyond year ten are worth $5.79 in total, most of it from the first few of them. If the dividend also grows at a steady rate gg, the Gordon growth formula gives:

P0=D1r−gfor r>g\key{P_0} = \frac{\good{D_1}}{\risk{r} - g} \qquad \text{for } r > g

Price equals next year’s dividend divided by the gap between the discount rate and the growth rate. The gap in the denominator is the whole story:

Next dividendrrggWorkingPrice
$310%5%3 / 0.05$60.00
$210%4%2 / 0.06$33.33
$210%5%2 / 0.05$40.00\key{\usd 40.00}: one point of growth is +20% of value
$210%8%2 / 0.02$100.00
$210%9.5%2 / 0.005$400.00

As gg creeps towards rr the denominator shrinks towards zero and the price explodes; at g≥rg \ge r the formula gives nonsense, because a dividend growing as fast as the discount rate is worth an infinite amount. The second panel of the chart draws the curve. No company grows faster than the economy forever, so the long-run gg is always a few percent, and a model that needs 8% to justify a price is a model that has already failed.

A discounted cash flow, and where the answer lives

A DCF forecasts a few years of cash flows explicitly, then handles everything after with a Gordon-style terminal value. A small one: $100 of cash this year, growing 8% a year for five years, then 3% forever, discounted at 10%.

PartWorkingValue today
Years 1 to 5, explicitfive discounted cash flows$473
Terminal value, years 6 onwardyear-5 cash × 1.03 / (0.10 − 0.03), discounted 5 years$1,342\key{\usd 1{,}342}
Total$1,816

Three quarters of the value is the terminal value, the part that rests on one long-run growth guess and one discount rate. Change either and the answer moves more than the whole explicit forecast is worth:

Itemgg = 0%2%3%5%
rr = 8%$1,750$2,200$2,560$4,000
rr = 10%$1,386$1,637$1,816\key{\usd 1{,}816}$2,389
rr = 12%$1,144$1,299$1,403$1,700

The honest range is $1,144 to $4,000 for the same business, depending on two numbers nobody can verify. That is why a practitioner works with a range and a margin of safety rather than a point: estimate the value, then only buy well below it.

margin of safety=value−pricevalue\key{\text{margin of safety}} = \frac{\text{value} - \text{price}}{\text{value}}
CaseWorkingResult
Value $62.50, price $50(62.50 − 50) / 62.5020% margin, divided by value
Want a 25% margin on a value of $8080 × 0.75buy at $60 or below
Scenarios: 25% chance $40, 50% $60, 25% $9010 + 30 + 22.5expected value $62.50

The last row is the expected value of a valuation under several futures, and it is still one number: one of the three scenarios will happen, not the average.

Book value is accounting, not value

A company’s book value is its assets minus its liabilities on the balance sheet, which carries assets at cost less depreciation. Assets $500M, liabilities $320M, 30 million shares: book value $180M, $6 a share. At a price of $9 the price-to-book ratio is 1.5. A ratio above 1 is normal, because a working business is worth more than its parts sold off: the brand, the customers and the growth are not on the balance sheet. A ratio below 1 can mean a bargain or a business in trouble; the number alone does not say which. In a forced sale, book value can overstate what the assets fetch.

Being right about value is not a good trade

The gap between price and value pays only if it closes, and only if you are still there when it does. A stock can stay mispriced for years; a short position loses without limit while it waits; a margin call can force a sale at the worst moment. Value tells you what to own. It does not tell you when the market will agree, and the market is under no obligation to.

Traps

TrapTruth
A higher discount rate raises the valueIt lowers it
Gordon works for any growth rateOnly for g<rg < r, and gg is a few percent at most
The explicit forecast is most of a DCFThe terminal value usually is
Margin of safety divides by the priceBy the value
A positive expected value means you cannot loseOne scenario happens
Price-to-book below 1 means cheapOr trouble
The price reveals the true valueThe price is where the last trade happened

The code

def present_value(cash, rate, years):
    return cash / (1 + rate) ** years                     # 121 at 10% for 2 years -> 100

def gordon(next_dividend, rate, growth):
    assert growth < rate
    return next_dividend / (rate - growth)                # 2, 10%, 5% -> 40

def dcf(cash0=100, growth=0.08, rate=0.10, g_term=0.03, years=5):
    flows = [cash0 * (1 + growth) ** k for k in range(1, years + 1)]
    explicit = sum(cf / (1 + rate) ** k for k, cf in enumerate(flows, 1))      # 473
    terminal = flows[-1] * (1 + g_term) / (rate - g_term) / (1 + rate) ** years  # 1,342
    return explicit + terminal                                                 # 1,816

margin = lambda value, price: (value - price) / value       # 62.50, 50 -> 0.20

Summary

IdeaFormulaRemember it as
Present valueFV/(1+r)nFV / (1 + r)^ndivide once per year
PerpetuityD/rD / r$1 forever at 8% is $12.50
Gordon growthD1/(r−g)D_1 / (r - g)the gap in the denominator
Terminal valuelast cash × (1 + g) / (r − g)most of the answer
Margin of safety(value − price) / valuebuy well below the estimate
Book valueassets − liabilitiesaccounting, not worth

References

  • Myron J. Gordon and Eli Shapiro, “Capital Equipment Analysis: The Required Rate of Profit”, Management Science 3(1), 102–110, 1956, the growth formula
  • Philip J. Romero and Tucker Balch, What Hedge Funds Really Do: An Introduction to Portfolio Management (Business Expert Press, 2014), chapters 5 and 6: present value, intrinsic value as the sum of discounted dividends, book value against market value
  • Benjamin Graham, The Intelligent Investor (Harper, revised edition 2006), chapter 20: the margin of safety