diff --git a/extensions/functions_rounding.yaml b/extensions/functions_rounding.yaml index 2243ef7b0..09309f2c2 100644 --- a/extensions/functions_rounding.yaml +++ b/extensions/functions_rounding.yaml @@ -27,3 +27,244 @@ scalar_functions: - value: fp64 name: "x" return: fp64 + - + name: "round" + description: > + Rounding the value `x` to `s` decimal places. + impls: + - args: + - value: i8 + name: "x" + description: > + Numerical expression to be rounded. + - value: i32 + name: "s" + description: > + Number of decimal places to be rounded to. + + When `s` is a positive number, nothing will happen + since `x` is an integer value. + + When `s` is a negative number, the rounding is + performed to the nearest multiple of `10^(-s)`. + options: + rounding: + description: > + When a boundary is computed to lie somewhere between two values, + and this value cannot be exactly represented, this specifies how + to round it. + + - TIE_TO_EVEN: round to nearest value; if exactly halfway, tie + to the even option. + - TIE_AWAY_FROM_ZERO: round to nearest value; if exactly + halfway, tie away from zero. + - TRUNCATE: always round toward zero. + - CEILING: always round toward positive infinity. + - FLOOR: always round toward negative infinity. + - AWAY_FROM_ZERO: round negative values with FLOOR rule, round positive values with CEILING rule + - TIE_DOWN: round ties with FLOOR rule + - TIE_UP: round ties with CEILING rule + - TIE_TOWARDS_ZERO: round ties with TRUNCATE rule + - TIE_TO_ODD: round to nearest value; if exactly halfway, tie + to the odd option. + values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR, + AWAY_FROM_ZERO, TIE_DOWN, TIE_UP, TIE_TOWARDS_ZERO, TIE_TO_ODD ] + nullability: DECLARED_OUTPUT + return: i8? + - args: + - value: i16 + name: "x" + description: > + Numerical expression to be rounded. + - value: i32 + name: "s" + description: > + Number of decimal places to be rounded to. + + When `s` is a positive number, nothing will happen + since `x` is an integer value. + + When `s` is a negative number, the rounding is + performed to the nearest multiple of `10^(-s)`. + options: + rounding: + description: > + When a boundary is computed to lie somewhere between two values, + and this value cannot be exactly represented, this specifies how + to round it. + + - TIE_TO_EVEN: round to nearest value; if exactly halfway, tie + to the even option. + - TIE_AWAY_FROM_ZERO: round to nearest value; if exactly + halfway, tie away from zero. + - TRUNCATE: always round toward zero. + - CEILING: always round toward positive infinity. + - FLOOR: always round toward negative infinity. + - AWAY_FROM_ZERO: round negative values with FLOOR rule, round positive values with CEILING rule + - TIE_DOWN: round ties with FLOOR rule + - TIE_UP: round ties with CEILING rule + - TIE_TOWARDS_ZERO: round ties with TRUNCATE rule + - TIE_TO_ODD: round to nearest value; if exactly halfway, tie + to the odd option. + values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR, + AWAY_FROM_ZERO, TIE_DOWN, TIE_UP, TIE_TOWARDS_ZERO, TIE_TO_ODD ] + nullability: DECLARED_OUTPUT + return: i16? + - args: + - value: i32 + name: "x" + description: > + Numerical expression to be rounded. + - value: i32 + name: "s" + description: > + Number of decimal places to be rounded to. + + When `s` is a positive number, nothing will happen + since `x` is an integer value. + + When `s` is a negative number, the rounding is + performed to the nearest multiple of `10^(-s)`. + options: + rounding: + description: > + When a boundary is computed to lie somewhere between two values, + and this value cannot be exactly represented, this specifies how + to round it. + + - TIE_TO_EVEN: round to nearest value; if exactly halfway, tie + to the even option. + - TIE_AWAY_FROM_ZERO: round to nearest value; if exactly + halfway, tie away from zero. + - TRUNCATE: always round toward zero. + - CEILING: always round toward positive infinity. + - FLOOR: always round toward negative infinity. + - AWAY_FROM_ZERO: round negative values with FLOOR rule, round positive values with CEILING rule + - TIE_DOWN: round ties with FLOOR rule + - TIE_UP: round ties with CEILING rule + - TIE_TOWARDS_ZERO: round ties with TRUNCATE rule + - TIE_TO_ODD: round to nearest value; if exactly halfway, tie + to the odd option. + values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR, + AWAY_FROM_ZERO, TIE_DOWN, TIE_UP, TIE_TOWARDS_ZERO, TIE_TO_ODD ] + nullability: DECLARED_OUTPUT + return: i32? + - args: + - value: i64 + name: "x" + description: > + Numerical expression to be rounded. + - value: i32 + name: "s" + description: > + Number of decimal places to be rounded to. + + When `s` is a positive number, nothing will happen + since `x` is an integer value. + + When `s` is a negative number, the rounding is + performed to the nearest multiple of `10^(-s)`. + options: + rounding: + description: > + When a boundary is computed to lie somewhere between two values, + and this value cannot be exactly represented, this specifies how + to round it. + + - TIE_TO_EVEN: round to nearest value; if exactly halfway, tie + to the even option. + - TIE_AWAY_FROM_ZERO: round to nearest value; if exactly + halfway, tie away from zero. + - TRUNCATE: always round toward zero. + - CEILING: always round toward positive infinity. + - FLOOR: always round toward negative infinity. + - AWAY_FROM_ZERO: round negative values with FLOOR rule, round positive values with CEILING rule + - TIE_DOWN: round ties with FLOOR rule + - TIE_UP: round ties with CEILING rule + - TIE_TOWARDS_ZERO: round ties with TRUNCATE rule + - TIE_TO_ODD: round to nearest value; if exactly halfway, tie + to the odd option. + values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR, + AWAY_FROM_ZERO, TIE_DOWN, TIE_UP, TIE_TOWARDS_ZERO, TIE_TO_ODD ] + nullability: DECLARED_OUTPUT + return: i64? + - args: + - value: fp32 + name: "x" + description: > + Numerical expression to be rounded. + - value: i32 + name: "s" + description: > + Number of decimal places to be rounded to. + + When `s` is a positive number, the rounding + is performed to a `s` number of decimal places. + + When `s` is a negative number, the rounding is + performed to the left side of the decimal point + as specified by `s`. + options: + rounding: + description: > + When a boundary is computed to lie somewhere between two values, + and this value cannot be exactly represented, this specifies how + to round it. + + - TIE_TO_EVEN: round to nearest value; if exactly halfway, tie + to the even option. + - TIE_AWAY_FROM_ZERO: round to nearest value; if exactly + halfway, tie away from zero. + - TRUNCATE: always round toward zero. + - CEILING: always round toward positive infinity. + - FLOOR: always round toward negative infinity. + - AWAY_FROM_ZERO: round negative values with FLOOR rule, round positive values with CEILING rule + - TIE_DOWN: round ties with FLOOR rule + - TIE_UP: round ties with CEILING rule + - TIE_TOWARDS_ZERO: round ties with TRUNCATE rule + - TIE_TO_ODD: round to nearest value; if exactly halfway, tie + to the odd option. + values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR, + AWAY_FROM_ZERO, TIE_DOWN, TIE_UP, TIE_TOWARDS_ZERO, TIE_TO_ODD ] + nullability: DECLARED_OUTPUT + return: fp32? + - args: + - value: fp64 + name: "x" + description: > + Numerical expression to be rounded. + - value: i32 + name: "s" + description: > + Number of decimal places to be rounded to. + + When `s` is a positive number, the rounding + is performed to a `s` number of decimal places. + + When `s` is a negative number, the rounding is + performed to the left side of the decimal point + as specified by `s`. + options: + rounding: + description: > + When a boundary is computed to lie somewhere between two values, + and this value cannot be exactly represented, this specifies how + to round it. + + - TIE_TO_EVEN: round to nearest value; if exactly halfway, tie + to the even option. + - TIE_AWAY_FROM_ZERO: round to nearest value; if exactly + halfway, tie away from zero. + - TRUNCATE: always round toward zero. + - CEILING: always round toward positive infinity. + - FLOOR: always round toward negative infinity. + - AWAY_FROM_ZERO: round negative values with FLOOR rule, round positive values with CEILING rule + - TIE_DOWN: round ties with FLOOR rule + - TIE_UP: round ties with CEILING rule + - TIE_TOWARDS_ZERO: round ties with TRUNCATE rule + - TIE_TO_ODD: round to nearest value; if exactly halfway, tie + to the odd option. + values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR, + AWAY_FROM_ZERO, TIE_DOWN, TIE_UP, TIE_TOWARDS_ZERO, TIE_TO_ODD ] + nullability: DECLARED_OUTPUT + return: fp64?