clamp

Stellt mathematische Clamp-Funktionen für numerische Typen in DuckDB bereit, darunter allgemeines Clamping, Saturate und weitere. Stellt sicher, dass Werte in einem angegebenen Bereich bleiben, und behandelt NULLs und NaNs korrekt.

Maintainer: oglego

Installation und Laden

INSTALL clamp FROM community;
LOAD clamp;

Beispiel

-- General clamp between min and max
SELECT clamp(5, 0, 10); -- Returns 5
SELECT clamp(-5, 0, 10); -- Returns 0
SELECT clamp(15, 0, 10); -- Returns 10
-- NULL handling
SELECT clamp(NULL, 0, 10); -- Returns NULL
SELECT clamp(5, NULL, 10); -- Returns NULL
SELECT clamp(5, 0, NULL); -- Returns NULL
-- Convenience clip (alias for clamp)
SELECT clip(15, 10, 20); -- Returns 15
SELECT clip(5, 10, 20); -- Returns 10
SELECT clip(25, 10, 20); -- Returns 20
-- Saturate (equivalent to clamp(x, 0.0, 1.0))
SELECT saturate(0.5); -- Returns 0.5
SELECT saturate(-0.5); -- Returns 0.0
SELECT saturate(1.5); -- Returns 1.0
-- Convenience clamp01 (alias for saturate)
SELECT clamp01(0.7); -- Returns 0.7
SELECT clamp01(-1.0); -- Returns 0.0
SELECT clamp01(2.0); -- Returns 1.0
-- Handling NaN and NULL
SELECT clamp(CAST('NaN' AS DOUBLE), 0, 10); -- Returns NaN
SELECT saturate(NULL); -- Returns NULL
-- Wrap a value into a range [min, max) using modular arithmetic
SELECT wrap(11, 0, 10); -- Returns 1
SELECT wrap(25, 10, 20); -- Returns 15
SELECT wrap(5, 10, 20); -- Returns 15
-- Pingpong a value between min and max
SELECT pingpong(11, 0, 10); -- Returns 9
SELECT pingpong(12, 10, 20); -- Returns 12
SELECT pingpong(28, 10, 20); -- Returns 12
-- Fract (returns the fractional part of a number)
SELECT fract(1.75); -- Returns 0.75
SELECT fract(-0.1); -- Returns 0.9
SELECT fract(10); -- Returns 0.0

Über clamp

Die Clamp-Erweiterung stellt Funktionen zur numerischen Begrenzung bereit:

  1. clamp(value, min, max): Beschränkt einen numerischen Wert auf das Intervall zwischen min und max.

    • Unterstützt NaN-Propagation (IEEE-754-Standard)
    • Wirft eine Exception, wenn min > max
    • Gibt NULL zurück, wenn ein Argument NULL ist
  2. clip(value, min, max): Alias für clamp(value, min, max).

  3. saturate(value): Komfortfunktion, die Werte auf das Intervall 0.0 bis 1.0 begrenzt.

  4. clamp01(value): Alias für saturate(value).

  5. wrap(value, min, max): Wickelt einen Wert x mit modularer Arithmetik in den Bereich [min, max).

  6. pingpong(value, min, max): Gibt einen Wert zurück, der zwischen min und max hin- und herspringt.

  7. fract(value): Gibt den Nachkommaanteil einer Zahl zurück.

Die Erweiterung behandelt Randfälle zuverlässig, darunter:

  • NaN-Werte
  • NULLs
  • Gleitkommazahlen
  • große Ganzzahlen

Hinzugefügte Funktionen

function_name function_type description comment examples
clamp scalar NULL NULL
clamp01 scalar NULL NULL
clip scalar NULL NULL
fract scalar NULL NULL
pingpong scalar NULL NULL
saturate scalar NULL NULL
wrap scalar NULL NULL

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.