// Result computes the square root of the variance. func (a *stdDevAggregate) Result() Datum { variance := a.agg.Result() if variance == DNull { return variance } switch t := variance.(type) { case *DFloat: return NewDFloat(DFloat(math.Sqrt(float64(*t)))) case *DDecimal: decimal.Sqrt(&t.Dec, &t.Dec, decimal.Precision) return t } panic(fmt.Sprintf("unexpected variance result type: %s", variance.ResolvedType())) }
}, }, "sqrt": { floatBuiltin1(func(x float64) (Datum, error) { if x < 0 { return nil, errSqrtOfNegNumber } return NewDFloat(DFloat(math.Sqrt(x))), nil }), decimalBuiltin1(func(x *inf.Dec) (Datum, error) { if x.Sign() < 0 { return nil, errSqrtOfNegNumber } dd := &DDecimal{} decimal.Sqrt(&dd.Dec, x, decimal.Precision) return dd, nil }), }, "tan": { floatBuiltin1(func(x float64) (Datum, error) { return NewDFloat(DFloat(math.Tan(x))), nil }), }, "trunc": { floatBuiltin1(func(x float64) (Datum, error) { return NewDFloat(DFloat(math.Trunc(x))), nil }), decimalBuiltin1(func(x *inf.Dec) (Datum, error) {