```typescript
/**
 * a divided by b, rounded if necessary.
 */
export function safeDivide(a: number, b: number): number {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error("Both arguments must be numbers.");
  }
  const isZero = Number.isFinite(b) && b === 0;
  const isNegativeZero = Number.isFinite(b) && b === -0;
  const result = Math.trunc(a / b);

  if (isZero || isNegativeZero) {
    return 0;
  }

  const remainder = a % b;

  if (remainder < b / 2) {
    return result - 1;
  } else {
    return result + 1;
  }
}
```