Desafío de código:Cambiar dispensador

Hace poco me encontré con un acertijo que pedía tomar una cantidad de cambio y devolver el equivalente en dólares y monedas.

Esta es la solución de cinco minutos que se me ocurrió por primera vez.

function makeChange (money) {
    var i, num,
        output = [],
        coins  = [
            [100, "dollar",  "dollars" ],
            [25,  "quarter", "quarters"],
            [10,  "dime",    "dimes"   ],
            [5,   "nickel",  "nickels" ],
            [1,   "penny",   "pennies" ]
        ];
    money = money * 100; // avoid float precision issues
    for (i = 0; i < coins.length; i++) {
        num = Math.floor(money / coins[i][0]);
        money -= num * coins[i][0];
        if (num) {
            output.push(num + " " + coins[i][num > 1 ? 2 : 1]);
        }
    }
    return output.join(", ");
}

makeChange(0.37); // "1 quarter, 1 dime, 2 pennies"

Sin embargo, siento que me estoy perdiendo algo. ¿Cómo mejoraría este código para hacerlo más breve, más rápido o mejor?