```ts
/**
 * Returns the charge for one step.
 * @param amount - The amount to calculate the charge for.
 * @param fixed - The fixed sum part of the charge.
 * @param percent - The whole-percent share of the amount to include in the charge, rounded down.
 */
export function stepRate(amount: number, fixed: number, percent: number): number {
  if (amount < 0 || percent < 0) throw new Error("Amount and percent must be non-negative");
  return Math.floor(fixed + amount * (percent / 100));
}

/**
 * Returns the charge for each of several amounts.
 * @param amounts - The amounts to calculate charges for.
 * @param fixed - The fixed sum part of the charge.
 * @param percent - The whole-percent share of the amount to include in the charge, rounded down.
 */
export function rateSteps(amounts: number[], fixed: number, percent: number): number[] {
  if (amounts.some(a => a < 0) || percent < 0) throw new Error("Amounts and percent must be non-negative");
  return amounts.map(amount => stepRate(amount, fixed, percent));
}
```