[
https://issues.apache.org/jira/browse/ARROW-16223?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Renat Valiullin updated ARROW-16223:
------------------------------------
Description:
BasicDecimal128 one(5); // 0.5
one.ReduceScaleBy(1, true); // expected 1, but result is -1
{code:java}
BasicDecimal128 BasicDecimal128::ReduceScaleBy(int32_t reduce_by, bool round)
const {
...
if (remainder.Abs() >= divisor_half) {
if (result > 0) { // << should be >=
result += 1;
}
else {
result -= 1;
}
}
{code}
was:
BasicDecimal128 one(5); // 0.5
one.ReduceScaleBy(1, true); // expected 1, but result is -1
BasicDecimal128 BasicDecimal128::ReduceScaleBy(int32_t reduce_by, bool round)
const {
...
if (result > 0) { // <<< should be >=
result += 1;
} else {
result -= 1;
}
> BasicDecimal128::ReduceScaleBy with rounding works incorrectly
> --------------------------------------------------------------
>
> Key: ARROW-16223
> URL: https://issues.apache.org/jira/browse/ARROW-16223
> Project: Apache Arrow
> Issue Type: Bug
> Components: C++
> Reporter: Renat Valiullin
> Priority: Major
>
> BasicDecimal128 one(5); // 0.5
> one.ReduceScaleBy(1, true); // expected 1, but result is -1
> {code:java}
> BasicDecimal128 BasicDecimal128::ReduceScaleBy(int32_t reduce_by, bool round)
> const {
> ...
> if (remainder.Abs() >= divisor_half) {
> if (result > 0) { // << should be >=
> result += 1;
> }
> else {
> result -= 1;
> }
> }
> {code}
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)