* NAME: scale_rational() * DESCRIPTION: solve numer/denom == ?/scale avoiding overflowing */
| 135 | * DESCRIPTION: solve numer/denom == ?/scale avoiding overflowing |
| 136 | */ |
| 137 | static |
| 138 | unsigned long scale_rational(unsigned long numer, unsigned long denom, |
| 139 | unsigned long scale) |
| 140 | { |
| 141 | reduce_rational(&numer, &denom); |
| 142 | reduce_rational(&scale, &denom); |
| 143 | |
| 144 | assert(denom != 0); |
| 145 | |
| 146 | if (denom < scale) |
| 147 | return numer * (scale / denom) + numer * (scale % denom) / denom; |
| 148 | if (denom < numer) |
| 149 | return scale * (numer / denom) + scale * (numer % denom) / denom; |
| 150 | |
| 151 | return numer * scale / denom; |
| 152 | } |
| 153 | |
| 154 | /* |
| 155 | * NAME: timer->set() |
no test coverage detected