1 &rsqb; A computer system for multiplying a first matrix and a second matrix that reduces rounding error, comprising: a processor; a memory; a storage device; and software instructions stored in the memory for enabling the computer system, under the control of the processor, to perform: obtaining a first set of dimension values for the first matrix and a second set of dimension values for the second matrix, selecting one of a plurality of multiplication permutations if the first set of dimension values and the second set of dimension values are greater than a crossover value, multiplying the first matrix by the second matrix using the multiplication permutation and a Strassen-Winograd method, recursively sub-dividing the first matrix and the second matrix producing a set of sub-matrix products and a recursion tree, and propagating the set of sub-matrix products up the recursion tree to produce a product matrix.