```typescript
function validateCelsius(celsius: number): void {
  if (typeof celsius !== "number" || !Number.isFinite(celsius)) {
    throw new Error("celsius must be a finite number");
  }
  if (celsius < -273.15) {
    throw new Error("celsius must be at or above absolute zero");
  }
}

/** The temperature in degrees Fahrenheit. */
export function celsiusToFahrenheit(celsius: number): number {
  validateCelsius(celsius);
  return celsius * 1.8 + 32;
}

/** The temperature in kelvin. */
export function celsiusToKelvin(celsius: number): number {
  validateCelsius(celsius);
  return celsius + 273.15;
}
```

The final file with the shared validation moved to `validateCelsius` makes the code more modular and easier to maintain, as changes in validation can be easily updated and reused across other parts of the application without affecting the core logic of the functions.