[PATCH] D127140: [APFloat] Fix truncation of certain subnormal numbers

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 7 10:51:31 PDT 2022


efriedma added a comment.

In some cases, we might need to round up a denormal number.  Suppose, for example, the result of a conversion is exactly half of the smallest denormal number, or slightly greater than that.  Then in "nearest" rounding mode, we need to round up.  And in the case of float->bfloat, exactly half of the smallest denormal bfloat is a denormal float.

So I'm really not comfortable just overwriting the lost_fraction.

The "Underflow to zero and round" dance in convertFromDecimalString is meant to handle different rounding modes, for example, round away from zero.  normalize() rounds the result appropriately.  So either lfExactlyZero or lfLessThanHalf is meaningful with a zero signficand, but lfMoreThanHalf isn't really.

normalize() should handle "arbitrary" inputs, in the sense that it can correctly handle significands and exponents which aren't directly representable in the destination floating-point format.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D127140/new/

https://reviews.llvm.org/D127140



More information about the llvm-commits mailing list