[
https://issues.apache.org/jira/browse/CASSANDRA-18470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17715001#comment-17715001
]
Branimir Lambov commented on CASSANDRA-18470:
---------------------------------------------
{{BigDecimal}} behaves too much like an integer for {{avg = avg + (value - avg)
/ count}} to work. For this type it makes full sense to just calculate the sum
and divide by count.
However, there's a bigger problem (and a potential attack vector) for these
methods. If one manages to sneak e.g. {{1e-100000000}} in a field, it would
make sum and avg take forever.
The precision of {{decimal}} was dealt with in CASSANDRA-15232 and
CASSANDRA-17221. Looks like it's time we did this for the aggregate function as
well.
> Average of "decimal" values rounds the average if all inputs are integers
> -------------------------------------------------------------------------
>
> Key: CASSANDRA-18470
> URL: https://issues.apache.org/jira/browse/CASSANDRA-18470
> Project: Cassandra
> Issue Type: Bug
> Reporter: Nadav Har'El
> Priority: Normal
>
> When running the AVG aggregator on "decimal" values, each value is an
> arbitrary-precision number which may be an integer or fractional, but it is
> expected that the average would be, in general, fractional. But it turns out
> that if all the values are integer *without* a ".0", the aggregator sums them
> up as integers and the final division returns an integer too instead of the
> fractional response expected from a "decimal" value.
> For example:
> # AVG of {{decimal}} values 1.0 and 2.0 returns 1.5, as expected.
> # AVG of 1.0 and 2 or 1 and 2.0 also return 1.5.
> # But AVG of 1 and 2 returns... 1. This is wrong. The user asked for the
> average to be a "decimal", not a "varint", so there is no reason why it
> should be rounded up to be an integer.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]