Costs of a simplex or single-version system are compared with the following three-version fault-tolerant software systems: N-version programming (NVP), recovery block (RB), and consensus recovery block (CRB). Cost is minimized subject to a system reliability constraint. The objective function of the optimization program is of the form SIGMA-beta-i/(1 - r(i))alpha-i where the constants beta-i and alpha-i are fixed and the r(i) are variables that are reliabilities of the versions, the acceptance test in the case of RB and CRB and the voter in the case of NVP and CRB. The costs are compared for different values of beta-i and for values of alpha-i = 0.5, 1, and 2. Assuming that failures are independent, CRB followed by RB are the most cost-justifiable fault-tolerant techniques considered. Unless the voter is perfect, NVP does not compete cost-wise with the other two methods. Indeed, in some cases it is worse than a simplex system.