**Submitter:**Fred Tydeman

**Submission Date:** 2020-03-20

**Document:** WG14 N2506

**Reference Documents:**

Summary

The standard has a few incorrect, missing, or ambiguous statements about range errors in some of the math functions.

Does "too large" mean close to +infinity or +/-infinity?

Does "too small" mean close to -infinity or +/-zero?

Implementers have interpreted these terms differently.

Some implementations incorrectly treat f(infinity) as a range error based upon the text: A range error occurs if [the magnitude of] x is too large. While this is covered by 7.12.1#5 about overflows, the CFP group believes it is better to be explicit in each math function where it matters.

Possible Technical Corrigendum:

- Treatment of error conditions
Change 7.12.1#5

... overflows if the magnitude ...

to:... overflows if the magnitude (absolute value) ...

- Treatment of error conditions
Change 7.12.1#6

... underflows if the magnitude ...

to:... underflows if the magnitude (absolute value) ...

- The asin functions
Add to 7.12.4.2#2

A range error occurs if nonzero x is too close to zero.

- The atan functions
Add to 7.12.4.3#2

A range error occurs if nonzero x is too close to zero.

- The atan2 functions
Add to 7.12.4.4#2

A range error occurs if x is positive and nonzero y/x is too close to zero.

- The sin functions
Add to 7.12.4.6#2

A range error occurs if nonzero x is too close to zero.

- The tan functions
Add to 7.12.4.7#2

A range error occurs if nonzero x is too close to zero.

- The asinpi functions
Change 7.12.4.9#2

A range error occurs if the magnitude of nonzero x is too small.

to:A range error occurs if

~~the magnitude of~~nonzero x is too~~small~~close to zero. - The atanpi functions
Change 7.12.4.10#2

A range error occurs if the magnitude of nonzero x is too small.

to:A range error occurs if

~~the magnitude of~~nonzero x is too~~small~~close to zero. - The atan2pi functions
Change 7.12.4.11#2

A range error occurs if x is positive and the magnitude of nonzero y/x is too small.

to:A range error occurs if x is positive and

~~the magnitude of~~nonzero y/x is too~~small~~close to zero. - The sinpi functions
Add to 7.12.4.13#2

A range error occurs if nonzero x is too close to zero.

- The tanpi functions
Add to 7.12.4.14#2

A range error occurs if nonzero x is too close to zero.

- The asinh functions
Add to 7.12.5.2#2

A range error occurs if nonzero x is too close to zero.

- The atanh functions
Add to 7.12.5.3#2

A range error occurs if nonzero x is too close to zero.

- The cosh functions
Change 7.12.5.4#2 from

A range error occurs if the magnitude of x is too large.

to

A range error occurs if the magnitude of finite x is too large.

- The sinh functions
Change 7.12.5.5#2 from

A range error occurs if the magnitude of x is too large.

to

A range error occurs if the magnitude of finite x is too large or if nonzero x is too close to zero.

- The tanh functions
Add to 7.12.5.6#2

A range error occurs if nonzero x is too close to zero.

- The exp functions
Change 7.12.6.1#2 from

A range error occurs if the magnitude of x is too large.

to

A range error occurs if the magnitude of finite x is too large.

- The exp10 functions
Change 7.12.6.2#2 from

A range error occurs if the magnitude of x is too large.

to

A range error occurs if the magnitude of finite x is too large.

- The exp10m1 functions
Change 7.12.6.3#2 from

A range error occurs if finite x is too large or if the magnitude of nonzero x is too small.

to

A range error occurs if positive finite x is too large or if

~~the magnitude of~~nonzero x is too~~small~~close to zero. - The exp2 functions
Change 7.12.6.4#2 from

A range error occurs if the magnitude of x is too large.

to

A range error occurs if the magnitude of finite x is too large.

- The exp2m1 functions
Change 7.12.6.5#2 from

A range error occurs if the magnitude of x is too large or if the magnitude of nonzero x is too small.

to

A range error occurs if

~~the magnitude of~~positive finite x is too large or if~~the magnitude of~~nonzero x is too~~small~~close to zero. - The expm1 functions
Change 7.12.6.6#2 from

A range error occurs if positive x is too large.252)

to

A range error occurs if positive finite x is too large or if nonzero x is too close to zero.252)

- The ldexp functions
Change 7.12.6.9#2 from

A range error may occur.

to

A range error

~~may occur~~occurs for some finite x, depending on p. - The log10p1 function
Change 7.12.6.13#2

A range error occurs if the magnitude of nonzero x is too small.

to:A range error occurs if

~~the magnitude~~nonzero x is too~~small~~close to zero. - The log1p and logp1 functions
Add to 7.12.6.14#2

A range error occurs if nonzero x is too close to zero.

- The log2p1 functions
Add to 7.12.6.16#2

A range error occurs if nonzero x is too close to zero.

- The scalbn and scalbln functions
Change 7.12.6.19#2 from

A range error may occur.

to

A range error

~~may occur~~occurs for some finite x, depending on n. - The compoundn functions
Change 7.12.7.2#2 from

A range error may occur if n is too large, depending on x.

to

A range error

~~may occur~~occurs if positive finite x~~n~~is too large or if x is too near but not equal to -1, depending on n~~x~~. - The hypot functions
Change 7.12.7.4#2 from

A range error may occur.

to

A range error

~~may occur~~occurs for some finite arguments. - The pow functions
Change 7.12.7.5#2 from

A range error may occur.

to

A range error

~~may occur~~ocurs if the magnitude of nonzero finite x is too large or too near zero, depending on y. - The pown functions
Change 7.12.7.6#2 from

A range error may occur.

to

A range error

~~may occur~~occurs if the magnitude of nonzero finite x is too large or too near zero, depending on n. - The powr functions
Change 7.12.7.7#2 from

A range error may occur.

to

A range error

~~may occur~~occurs if positive nonzero finite x is too large or too near zero, depending on y. - The rootn functions
Change 7.12.7.8#2 from

A range error may occur if n is -1.

to

A range error

~~may occur~~occurs if n is -1 and the magnitude of nonzero finite x is too large or too near zero . - The erf functions
Add to 7.12.8.1#2

A range error occurs if nonzero x is too close to zero.

- The erfc functions
Change 7.12.8.2#2

A range error occurs if positive x is too large.

to:

A range error occurs if positive finite x is too large.

- The lgamma functions
Change 7.12.8.3#2

A range error occurs if positive x is too large.

to:

A range error occurs if positive finite x is too large.

- The tgamma functions
Change 7.12.8.4#2

A range error occurs if the magnitude of x is too large and may occur if the magnitude of x is too small.

to:

A range error occurs for some negative finite x, and if

~~the magnitude of~~positive finite x is too large or~~and may occur if the magnitude of~~nonzero x is too~~small~~close to zero. - The fmod functions
Add to 7.12.10.1#2

A range error occurs if x is finite, both x and y are nonzero, and either is too close to zero.

- The remainder functions
Add to 7.12.10.2#2

A range error occurs if x is finite, both x and y are nonzero, and either is too close to zero.

- The fdim functions
Change 7.12.12.1#2

A range error may occur.

to:

A range error

~~may occur~~occurs if positive finite x-y is too large or too close to zero. - The fma functions
Change 7.12.13.1#2

A range error may occur.

to:

A range error

~~may occur~~occurs for some finite arguments.