Skip to content

Commit 4f8fe99

Browse files
authored
Simplify both versions of roundFixed (#12)
These simplifications slightly reduce the size of the generated code.
1 parent bd84a2c commit 4f8fe99

File tree

1 file changed

+5
-9
lines changed

1 file changed

+5
-9
lines changed

src/FixedPoints/Utils.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,21 +127,17 @@ template< unsigned Integer, unsigned Fraction >
127127
constexpr UFixed<Integer, Fraction> roundFixed(const UFixed<Integer, Fraction> & value)
128128
{
129129
using OutputType = UFixed<Integer, Fraction>;
130-
return (value.getInternal() & OutputType::MidpointMask) != 0 ? ceilFixed(value) : floorFixed(value);
130+
return ((value.getFraction() >= OutputType(0.5).getFraction()) != 0) ? ceilFixed(value) : floorFixed(value);
131131
}
132132

133133
template< unsigned Integer, unsigned Fraction >
134134
constexpr SFixed<Integer, Fraction> roundFixed(const SFixed<Integer, Fraction> & value)
135135
{
136136
using OutputType = SFixed<Integer, Fraction>;
137-
return
138-
(
139-
((value.getInternal() & OutputType::MidpointMask) != 0) &&
140-
(!signbitFixed(value) ||
141-
((value.getInternal() & OutputType::LesserMidpointMask) != 0))
142-
)
143-
? ceilFixed(value)
144-
: floorFixed(value);
137+
return
138+
signbitFixed(value)
139+
? ((value.getFraction() <= OutputType(0.5).getFraction()) != 0) ? floorFixed(value) : ceilFixed(value)
140+
: ((value.getFraction() >= OutputType(0.5).getFraction()) != 0) ? ceilFixed(value) : floorFixed(value);
145141
}
146142

147143
template< unsigned Integer, unsigned Fraction >

0 commit comments

Comments
 (0)