**Document:** WG14 N1498

##
Add missing error conditions in math functions

**Submitter:** Fred J. Tydeman (USA)

**Submission Date:** 2010-06-17

**Subject:** Add missing error conditions in math
functions

Currently, several of the math library functions do not
specify error conditions that might happen on some
implementations, e.g., sin(INFINITY). Since it is
unspecified, different implementations could do any of
several things: indicate no error, or indicate different
errors. This makes writing portable applications difficult.

This is independent of IEEE-754.

For implementations that do not support INFINITY, having
sin(INFINITY) be specified as a domain error has no effect on
the implementation.

Add the following error conditions to the various math
functions.

7.12.4.5 The cos functions

A domain error occurs for infinite arguments.

7.12.4.6 The sin functions

A domain error occurs for infinite arguments.

7.12.4.7 The tan functions

A domain error occurs for infinite arguments.

7.12.8.4 The tgamma functions

A domain error occurs for a negative infinite argument.

7.12.10.1 The fmod functions

If x is infinite and y is not a NaN, a domain error occurs.

7.12.10.2 The remainder functions

If x is infinite and y is not a NaN, a domain error occurs.

7.12.10.3 The remquo functions

If x is infinite and y is not a NaN, a domain error occurs.

7.12.13.1 The fma functions

A domain error may occur for fma(x,y,z) if one of x and y is
infinite, the other is zero, and z is a NaN.

A domain error occurs for fma(x,y,z) if one of x and y is
infinite, the other is zero, and z is not a NaN.

A domain error occurs for fma(x,y,z) if x times y is an exact
infinity and z is also an infinity but with the opposite
sign.

Add the following to the Rationale for <math.h>:

For the same function call, having one implementation
indicate an error and another implementation indicate no
error makes it difficult to write portable application code.
An example of this is: sin(INFINITY); where one
implementation calls it a domain error, while another
implementation indicates no error.