APFloat renaming isNormal => isFiniteNonZero and isIEEENormal => isNormal

IEEE-754R defines a normal floating point number as:

2.1.38 normal number: For a particular format, a finite non-zero floating-point number with magnitude greater than or equal to a minimum bemin value, where b is the radix. Normal numbers can use the full precision available in a format. In this standard, zero is neither normal nor subnormal.

This implies that a denormal is not a normal number.

In contrast, the current implementation of isNormal in APFloat does treat denormal numbers as normal numbers breaking this definition. This is not just a predicate that has a name that differs from IEEE-754R (which I am fine with), but is an actual name collision with IEEE-754R with a different semantic meaning. This could easily lead to programmer error and thus in my humble opinion is worth the hassle/trouble of fixing.

Does anyone have any thoughts/suggestions/objections with my renaming isNormal => isFiniteNonZero (and making all the relevant changes in the relevant codebases) and isIEEENormal => isNormal?

Awaiting the flames,

I think it’s a splendid idea (but you already knew that).

I would give you 20 thumb up if I could.

At the time I add the isDenormal() , I realized the name “isNormal()” need some change to reflect its real meaning,
but I was reluctant to make that change, partially because I was a big llvm newbie at that time.
(now, I’m just slightly smaller nut than I was :-)).

To test a real “normal” FP, I wrote the code this way “isNormal() && !isDenorma()”.
With your change, this condition can be simplified.

LGTM (and you've already gotten other positive feedback as well).


It seems like there is a consensus that this is a good change. Any nay sayers?


Dude, go for it.

-- Sean Silva