Fast algorithms for matrix multiplication, or those that perform asymptotically fewer scalar operations than the classical algorithm, have been considered primarily of theoretical interest. Aside from Strassen's original algorithm, few fast algorithms have been efficiently implemented or used in practical applications. However, there exist many practical alternatives to Strassen's algorithm with varying performance and numerical properties. While fast algorithms are known to be numerically stable, their error bounds are slightly weaker than the classical algorithm. We argue in this paper that the numerical sacrifice of fast algorithms, particularly for the typical use cases of practical algorithms, is not prohibitive, and we explore ways to improve the accuracy both theoretically and empirically. The numerical accuracy of fast matrix multiplication depends on properties of the algorithm and of the input matrices, and we consider both contributions independently. We generalize and tighten previous error analyses of fast algorithms, compare the properties among the class of known practical fast algorithms, and discuss algorithmic techniques for improving the error guarantees. We also present means for reducing the numerical inaccuracies generated by anomalous input matrices using diagonal scaling matrices. Finally, we include empirical results that test the various improvement techniques, in terms of both their numerical accuracy and their performance.