[ 
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]

Reply via email to