[
https://issues.apache.org/jira/browse/CASSANDRA-15232?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16902898#comment-16902898
]
Benedict commented on CASSANDRA-15232:
--------------------------------------
Thanks [~Override], I agree that's the best way forward.
The patch is almost ready to commit. I have a couple of nits for you to
consider:
# {{CONTEXT_WITH_MAX_PRECISION}} and {{MAX_PRECISION}} could be merged into
simply {{MAX_PRECISION}} (as a {{MathContext}}) for brevity, since
{{MAX_PRECISION}} isn't used independently?
# {{leftOperandFirstDigitPos}} and {{rightOperandFirstDigitPos}} both subtract
1, which is cancelled out by the subtraction of one from the other, and are no
longer used for any other calculation. Perhaps rename the variables to
something that indicates we're just getting the normalised scale wrt each
other's decimal point? I haven't come up with an immediately good name, but
I'm sure it's possible. Of course, I hope the compiler eliminates the extra
calculation for us, so it's not strictly necessary - but it helps to avoid
triggering any human linters in future, and more clearly defines the purpose of
the variables.
Otherwise the patch looks ready to commit to me, thanks again for another great
submission.
Reviewing this ticket highlights another follow-up ticket, or discussion,
around the mod operator: I'm not entirely sure makes a lot of sense over
decimal values. Is this definitely a function we want to provide? I've only
ever understood it to be defined over the integer domain. I note that
{{BigDecimal}} names it {{remainder}}, and in fact the Java Language Spec does
the same, so it is not modulus we are offering here and we should rename it
internally and in any docs anyway.
We should probably discuss this for all value types, particularly floating
point types. I honestly was unaware Java supported remainder for floating
point, and the behaviour is unintuitive to say the least ({{0.4 % 0.25 ==
0.15}} ??)
I've also noted your other follow-up, it's good we're shaking out these minor
issues before we release the feature, so your help here is greatly appreciated!
> Arithmetic operators over decimal truncate results
> --------------------------------------------------
>
> Key: CASSANDRA-15232
> URL: https://issues.apache.org/jira/browse/CASSANDRA-15232
> Project: Cassandra
> Issue Type: Improvement
> Components: CQL/Semantics
> Reporter: Benedict
> Assignee: Liudmila Kornilova
> Priority: Normal
> Labels: pull-request-available
> Fix For: 4.0
>
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
> The decimal operators hard-code a 128 bit precision for their computations.
> Probably a precision needs to be configured or decided somehow, but it’s not
> clear why 128bit was chosen. Particularly for multiplication and addition,
> it’s very unclear why we truncate, which is different to our behaviour for
> e.g. sum() aggregates. Probably for division we should also ensure that we
> do not reduce the precision of the two operands. A minimum of decimal128
> seems reasonable, but a maximum does not.
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]