[Cfp-interest] review draft for CFP TS Part 1 content

Fred J. Tydeman tydeman at tybor.com
Tue Jan 10 10:37:01 PST 2012


On Mon, 9 Jan 2012 11:15:47 -0800 Jim Thomas wrote:
>
>> We could add words to F.10 Mathematics <math.h>
>> 
>> "Invalid" is a domain error.
>> "Divide-by-zero" is a pole error.
>> "Overflow" and "underflow" are range errors.
>
>This might could go after F.10 #9, as a way of tying floating-point exceptions 
>to the error specification in 7.12. But that doesn't mean we should start 
>specifying domain and range errors in Annex F. Another concern is that currently 
>a requirement for an error is satisfied by an appropriate exception (assuming 
>math_errhandling & MATH_ERREXCEPT is non zero), but, I believe, an exception is 
>not necessarily an error, which allows Annex F to specify exceptions even where 
>domain/pole/range errors are not allowed by 7.12 (e.g., see ilogb).

I disagree with the 'not allowed' in above.  C11, 7.12.1#2 has:

The description of each function lists any required domain errors; 
an implementation may define additional domain errors, provided
that such errors are consistent with the mathematical definition 
of the function.231)

>>> Should signaling NaNs cause errno to be set? If so then we probably want to 
>>> say so in the main library clause.
>> 
>> If a signaling NaN survives the calling convention and the function
>> sees it, then we have a domain error.  
>
>Maybe. I guess it's neater if all invalid exceptions are domain errors. On the 
>other hand, the invalid exception raised from a signaling NaN may be viewed as 
>a way of invoking a trap handler to get special semantics - not an error at all.

I believe that viewpoint assumes that invalid from signaling NaN is different
than all other invalids.  And that a trap handler could tell the difference.

>>>> 7.12.6.7 The llogb functions
>>>> Add at end of description:  and a domain error occurs.
>>> 
>>> The llogb words are the same as for ilogb. Do you think ilogb is wrong?
>> 
>> Yes, I think ilogb is wrong.  It (and llogb) should say:
>> A domain error occurs if x is zero, infinite, or NaN.
>> If the correct value is outside the range of the return type,
>> a domain error occurs and the numeric result is unspecified.
>
>I recall that the C committee considered this and was willing to have the 
>specification (for out-of-range cases) only in Annex F, not in clause 7.12. 
>Since the current spec is fine for Annex F implementations, 
>I don't think the CFP TS is the right vehicle for re-raising the issue.  

OK.  But, I would like to see llogb have all errors (including out of range) 
be domain errors.  That matches lrint and lround.

>>> Do narrowing add, sub, mul, and div need to set errno? Setting errno would 
>>> have a major performance cost on implementations with HW instructions that can 
>>> deliver narrower results. The corresponding built-in operators don't set 
>>> errno.
>> 
>> errno should be set if the expression 
>> math_errhandling & MATH_ERRNO is nonzero.
>> 
>> So, each implementation determines what is best for its customers.
>> If they have HW instructions, then they should set math_errhandling
>> to the value MATH_ERREXCEPT.
>
>Unfortunately, implementations have to continue supporting errno for legacy reasons.

Those implementations could define math_errhandling as just MATH_ERREXCEPT.
And, they could also set errno (as per 7.12.1#7) for the existing legacy
reasons, but not set errno for new functions.

>> We could add words to F.10 Mathematics <math.h>
>> 
>> "Invalid" is a domain error.
>> "Divide-by-zero" is a pole error.
>> "Overflow" and "underflow" are range errors.
>
>That would mean every FP exception required by Annex F would have to be 
>allowed in 7.12. How close does 7.12 come to this? 

I believe that 7.12 matches Annex F in almost every case.
ilogb is the one exception that I know of (which does not match lrint, 
nor lround, which require an error for out of range results).

---
Fred J. Tydeman        Tydeman Consulting
tydeman at tybor.com      Testing, numerics, programming
+1 (775) 358-9748      Vice-chair of PL22.11 (ANSI "C")
Sample C99+FPCE tests: http://www.tybor.com
Savers sleep well, investors eat well, spenders work forever.



More information about the Cfp-interest mailing list