Предполагая, что все здесь являются целочисленными значениями, любой оптимизирующий компилятор, достойный его внимания, заметит, что 16 - это степень двойки, и соответственно сдвигает дробь - при условии, что оптимизация включена Беспокоитесь больше об основных оптимизациях, которые компилятор не может сделать для вас.
Во всяком случае, вы должны заключить в скобки ref * frac
и затем разделить, так как любое значение ГРП меньше 16 приведет к 0, будь то сдвиг или деление.