-
Notifications
You must be signed in to change notification settings - Fork 268
Open
Labels
libmIssues relating to libmIssues relating to libm
Description
As noted in rust-lang/libm#415 (comment), our implementations currently do not align with musl/MPFR. There are a couple different specs to follow here.
N3047 (C23) states:
Ideally, fmax would be sensitive to the sign of zero, for example fmax(−0.0, +0.0) would return +0; however, implemen-
tation in software might be impractical
IEEE 754-2008 states:
- minNum(x, y) is the canonicalized number x if x < y, y if y < x, the canonicalized number if one operand is a number and the other a quiet NaN. Otherwise it is either x or y, canonicalized (this means results might differ among implementations). When either x or y is a signalingNaN, then the result is according to 6.2.
But does not really specify the order between -0.0 and 0.0.
IEEE 754-2019 states:
- minimum(x, y) is x if x < y, y if y < x, and a quiet NaN if either operand is a NaN, according to 6.2. For this operation, −0 compares less than +0. Otherwise (i.e., when x = y and signs are the same) it is either x or y
- minimumNumber(x, y) is x if x < y, y if y < x, and the number if one operand is a number and the other is a NaN. For this operation, −0 compares less than +0. If x = y and signs are the same it is either x or y. If both operands are NaNs, a quiet NaN is returned, according to 6.2. If either operand is a signaling NaN, an invalid operation exception is signaled, but unless both operands are NaNs, the signaling NaN is otherwise ignored and not converted to a quiet NaN as stated in 6.2 for other operations
C23 provides fmaximum, fminimum, fmaximum_num, and fminimum_num to reflect these newer specs.
So, my read of this is that we should be matching musl and MPFR in saying that +0.0 > -0.0, which is consistent with minimum in 754-2019 (note that NaN handling is still different).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
libmIssues relating to libmIssues relating to libm
Type
Fields
Give feedbackNo fields configured for issues without a type.