ISO/IEC TS 18661-4:2015
(Main)Information Technology — Programming languages, their environments, and system software interfaces — Floating-point extensions for C — Part 4: Supplementary functions
Information Technology — Programming languages, their environments, and system software interfaces — Floating-point extensions for C — Part 4: Supplementary functions
ISO/IEC TS 18661-4:2015 extends programming language C to include functions specified and recommended in ISO/IEC/IEEE 60559:2011.
Technologies de l'information — Langages de programmation, leurs environnements et interfaces du logiciel système — Extensions à virgule flottante pour C — Partie 4: Fonctions supplémentaires
General Information
Standards Content (Sample)
TECHNICAL ISO/IEC TS
SPECIFICATION 18661-4
First edition
2015-10-01
Information Technology —
Programming languages, their
environments, and system software
interfaces — Floating-point
extensions for C —
Part 4:
Supplementary functions
Technologies de l’information — Langages de programmation, leurs
environnements et interfaces du logiciel système — Extensions à
virgule flottante pour C —
Partie 4: Fonctions supplémentaires
Reference number
ISO/IEC TS 18661-4:2015(E)
©
ISO/IEC 2015
---------------------- Page: 1 ----------------------
ISO/IEC TS 18661-4:2015(E)
COPYRIGHT PROTECTED DOCUMENT
© ISO/IEC 2015, Published in Switzerland
All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized otherwise in any form
or by any means, electronic or mechanical, including photocopying, or posting on the internet or an intranet, without prior
written permission. Permission can be requested from either ISO at the address below or ISO’s member body in the country of
the requester.
ISO copyright office
Ch. de Blandonnet 8 • CP 401
CH-1214 Vernier, Geneva, Switzerland
Tel. +41 22 749 01 11
Fax +41 22 749 09 47
copyright@iso.org
www.iso.org
ii © ISO/IEC 2015 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
Foreword
.
iv
Introduction
.
vi
1
Scope
.
1
2
Conformance
.
1
3
Normative
references
.
1
4
Terms
and
definitions
.
2
5
C
standard
conformance
.
2
5.1
Freestanding
implementations
.
2
5.2
Predefined
macros
.
2
5.3
Standard
headers
.
2
6
Operation
binding
.
5
7
Mathematical
functions
in
.
6
8
Reduction
functions
in
.
19
9
Future
directions
for
.
26
10
Type-‐generic
macros
.
27
11
Constant
rounding
modes
.
27
Bibliography
.
31
©
ISO/IEC
2015
–
All
rights
reserved
iii
---------------------- Page: 3 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
Foreword
ISO
(the
International
Organization
for
Standardization)
and
IEC
(the
International
Electrotechnical
Commission)
form
the
specialized
system
for
worldwide
standardization.
National
bodies
that
are
members
of
ISO
or
IEC
participate
in
the
development
of
International
Standards
through
technical
committees
established
by
the
respective
organization
to
deal
with
particular
fields
of
technical
activity.
ISO
and
IEC
technical
committees
collaborate
in
fields
of
mutual
interest.
Other
international
organizations,
governmental
and
non-‐governmental,
in
liaison
with
ISO
and
IEC,
also
take
part
in
the
work.
In
the
field
of
information
technology,
ISO
and
IEC
have
established
a
joint
technical
committee,
ISO/IEC
JTC
1.
The
procedures
used
to
develop
this
document
and
those
intended
for
its
further
maintenance
are
described
in
the
ISO/IEC
Directives,
Part
1.
In
particular
the
different
approval
criteria
needed
for
the
different
types
of
document
should
be
noted.
This
document
was
drafted
in
accordance
with
the
editorial
rules
of
the
ISO/IEC
Directives,
Part
2
(see
www.iso.org/directives).
Attention
is
drawn
to
the
possibility
that
some
of
the
elements
of
this
document
may
be
the
subject
of
patent
rights.
ISO
and
IEC
shall
not
be
held
responsible
for
identifying
any
or
all
such
patent
rights.
Details
of
any
patent
rights
identified
during
the
development
of
the
document
will
be
in
the
Introduction
and/or
on
the
ISO
list
of
patent
declarations
received
(see
www.iso.org/patents).
Any
trade
name
used
in
this
document
is
information
given
for
the
convenience
of
users
and
does
not
constitute
an
endorsement.
For
an
explanation
on
the
meaning
of
ISO
specific
terms
and
expressions
related
to
conformity
assessment,
as
well
as
information
about
ISO's
adherence
to
the
WTO
principles
in
the
Technical
Barriers
to
Trade
(TBT)
see
the
following
URL:
Foreword
-‐
Supplementary
information
The
committee
responsible
for
this
document
is
ISO/IEC
JTC
1,
Information
technology,
Subcommittee
SC
22,
Programming
languages,
their
environments,
and
system
software
interfaces.
ISO/IEC
TS
18661
consists
of
the
following
parts,
under
the
general
title
Information
technology
—
Programming
languages,
their
environments,
and
system
software
interfaces
—
Floating-‐point
extensions
for
C:
⎯ Part
1:
Binary
floating-‐point
arithmetic
⎯ Part
2:
Decimal
floating-‐point
arithmetic
⎯ Part
3:
Interchange
and
extended
types
⎯ Part
4:
Supplementary
functions
The
following
part
is
under
preparation:
⎯ Part
5:
Supplementary
attributes
ISO/IEC
TS
18661-‐1
updates
ISO/IEC
9899:2011,
Information
technology
—
Programming
Language
C,
annex
F
in
particular,
to
support
all
required
features
of
ISO/IEC/IEEE
60559:2011,
Information
technology
—
Microprocessor
Systems
—
Floating-‐point
arithmetic.
ISO/IEC
TS
18661-‐2
supersedes
ISO/IEC
TR
24732:2009,
Information
technology
—
Programming
languages,
their
environments
and
system
software
interfaces
—
Extension
for
the
programming
language
C
to
support
decimal
floating-‐point
arithmetic.
iv
©
ISO/IEC
2015
–
All
rights
reserved
---------------------- Page: 4 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
ISO/IEC
TS
18661O-3,
ISO/IEC
TS
18661O-4,
and
ISO/IEC
TS
18661O-5
specify
extensions
to
ISO/IEC
9899:2011
for
features
recommended
in
ISO/IEC/IEEE
60559:2011.
©
ISO/IEC
2015
–
All
rights
reserved
v
---------------------- Page: 5 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
Introduction
Background
IEC
60559
floating-‐point
standard
The
IEEE
754-‐1985
standard
for
binary
floating-‐point
arithmetic
was
motivated
by
an
expanding
diversity
in
floating-‐point
data
representation
and
arithmetic,
which
made
writing
robust
programs,
debugging,
and
moving
programs
between
systems
exceedingly
difficult.
Now
the
great
majority
of
systems
provide
data
formats
and
arithmetic
operations
according
to
this
standard.
The
IEC
60559:1989
international
standard
was
equivalent
to
the
IEEE
754-‐1985
standard.
Its
stated
goals
were
the
following:
1 Facilitate
movement
of
existing
programs
from
diverse
computers
to
those
that
adhere
to
this
standard.
2 Enhance
the
capabilities
and
safety
available
to
programmers
who,
though
not
expert
in
numerical
methods,
may
well
be
attempting
to
produce
numerically
sophisticated
programs.
However,
we
recognize
that
utility
and
safety
are
sometimes
antagonists.
3 Encourage
experts
to
develop
and
distribute
robust
and
efficient
numerical
programs
that
are
portable,
by
way
of
minor
editing
and
recompilation,
onto
any
computer
that
conforms
to
this
standard
and
possesses
adequate
capacity.
When
restricted
to
a
declared
subset
of
the
standard,
these
programs
should
produce
identical
results
on
all
conforming
systems.
4 Provide
direct
support
for
a. Execution-‐time
diagnosis
of
anomalies
b. Smoother
handling
of
exceptions
c. Interval
arithmetic
at
a
reasonable
cost
5 Provide
for
development
of
a. Standard
elementary
functions
such
as
exp
and
cos
b. Very
high
precision
(multiword)
arithmetic
c. Coupling
of
numerical
and
symbolic
algebraic
computation
6 Enable
rather
than
preclude
further
refinements
and
extensions.
To
these
ends,
the
standard
specified
a
floating-‐point
model
comprising
the
following:
— formats
–
for
binary
floating-‐point
data,
including
representations
for
Not-‐a-‐Number
(NaN)
and
signed
infinities
and
zeros
—
operations
–
basic
arithmetic
operations
(addition,
multiplication,
etc.)
on
the
format
data
to
compose
a
well-‐defined,
closed
arithmetic
system;
also
specified
conversions
between
floating-‐
point
formats
and
decimal
character
sequences,
and
a
few
auxiliary
operations
—
context
–
status
flags
for
detecting
exceptional
conditions
(invalid
operation,
division
by
zero,
overflow,
underflow,
and
inexact)
and
controls
for
choosing
different
rounding
methods
vi
©
ISO/IEC
2015
–
All
rights
reserved
---------------------- Page: 6 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
The
ISO/IEC/IEEE
60559:2011
international
standard
is
equivalent
to
the
IEEE
754-‐2008
standard
for
floating-‐point
arithmetic,
which
is
a
major
revision
to
IEEE
754-‐1985.
The
revised
standard
specifies
more
formats,
including
decimal
as
well
as
binary.
It
adds
a
128-‐bit
binary
format
to
its
basic
formats.
It
defines
extended
formats
for
all
of
its
basic
formats.
It
specifies
data
interchange
formats
(which
may
or
may
not
be
arithmetic),
including
a
16-‐bit
binary
format
and
an
unbounded
tower
of
wider
formats.
To
conform
to
the
floating-‐point
standard,
an
implementation
must
provide
at
least
one
of
the
basic
formats,
along
with
the
required
operations.
The
revised
standard
specifies
more
operations.
New
requirements
include
–
among
others
–
arithmetic
operations
that
round
their
result
to
a
narrower
format
than
the
operands
(with
just
one
rounding),
more
conversions
with
integer
types,
more
classifications
and
comparisons,
and
more
operations
for
managing
flags
and
modes.
New
recommendations
include
an
extensive
set
of
mathematical
functions
and
seven
reduction
functions
for
sums
and
scaled
products.
The
revised
standard
places
more
emphasis
on
reproducible
results,
which
is
reflected
in
its
standardization
of
more
operations.
For
the
most
part,
behaviors
are
completely
specified.
The
standard
requires
conversions
between
floating-‐point
formats
and
decimal
character
sequences
to
be
correctly
rounded
for
at
least
three
more
decimal
digits
than
is
required
to
distinguish
all
numbers
in
the
widest
supported
binary
format;
it
fully
specifies
conversions
involving
any
number
of
decimal
digits.
It
recommends
that
transcendental
functions
be
correctly
rounded.
The
revised
standard
requires
a
way
to
specify
a
constant
rounding
direction
for
a
static
portion
of
code,
with
details
left
to
programming
language
standards.
This
feature
potentially
allows
rounding
control
without
incurring
the
overhead
of
runtime
access
to
a
global
(or
thread)
rounding
mode.
Other
features
recommended
by
the
revised
standard
include
alternate
methods
for
exception
handling,
controls
for
expression
evaluation
(allowing
or
disallowing
various
optimizations),
support
for
fully
reproducible
results,
and
support
for
program
debugging.
The
revised
standard,
like
its
predecessor,
defines
its
model
of
floating-‐point
arithmetic
in
the
abstract.
It
neither
defines
the
way
in
which
operations
are
expressed
(which
might
vary
depending
on
the
computer
language
or
other
interface
being
used),
nor
does
it
define
the
concrete
representation
(specific
layout
in
storage,
or
in
a
processor's
register,
for
example)
of
data
or
context,
except
that
it
does
define
specific
encodings
that
are
to
be
used
for
the
exchange
of
floating-‐point
data
between
different
implementations
that
conform
to
the
specification.
IEC
60559
does
not
include
bindings
of
its
floating-‐point
model
for
particular
programming
languages.
However,
the
revised
standard
does
include
guidance
for
programming
language
standards,
in
recognition
of
the
fact
that
features
of
the
floating-‐point
standard,
even
if
well
supported
in
the
hardware,
are
not
available
to
users
unless
the
programming
language
provides
a
commensurate
level
of
support.
The
implementation’s
combination
of
both
hardware
and
software
determines
conformance
to
the
floating-‐point
standard.
C
support
for
IEC
60559
The
C
standard
specifies
floating-‐point
arithmetic
using
an
abstract
model.
The
representation
of
a
floating-‐point
number
is
specified
in
an
abstract
form
where
the
constituent
components
(sign,
exponent,
significand)
of
the
representation
are
defined
but
not
the
internals
of
these
components.
In
particular,
the
exponent
range,
significand
size,
and
the
base
(or
radix)
are
implementation-‐defined.
This
allows
flexibility
for
an
implementation
to
take
advantage
of
its
underlying
hardware
architecture.
Furthermore,
certain
behaviors
of
operations
are
also
implementation-‐defined,
for
example
in
the
area
of
handling
of
special
numbers
and
in
exceptions.
©
ISO/IEC
2015
–
All
rights
reserved
vii
---------------------- Page: 7 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
The
reason
for
this
approach
is
historical.
At
the
time
when
C
was
first
standardized,
before
the
floating-‐
point
standard
was
established,
there
were
various
hardware
implementations
of
floating-‐point
arithmetic
in
common
use.
Specifying
the
exact
details
of
a
representation
would
have
made
most
of
the
existing
implementations
at
the
time
not
conforming.
Beginning
with
ISO/IEC
9899:1999
(C99),
C
has
included
an
optional
second
level
of
specification
for
implementations
supporting
the
floating-‐point
standard.
C99,
in
conditionally
normative
annex
F,
introduced
nearly
complete
support
for
the
IEC
60559:1989
standard
for
binary
floating-‐point
arithmetic.
Also,
C99’s
informative
annex
G
offered
a
specification
of
complex
arithmetic
that
is
compatible
with
IEC
60559:1989.
ISO/IEC
9899:2011
(C11)
includes
refinements
to
the
C99
floating-‐point
specification,
though
it
is
still
based
on
IEC
60559:1989.
C11
upgraded
annex
G
from
“informative”
to
“conditionally
normative”.
ISO/IEC
TR
24732:2009
introduced
partial
C
support
for
the
decimal
floating-‐point
arithmetic
in
ISO/IEC/IEEE
60559:2011.
ISO/IEC
TR
24732,
for
which
technical
content
was
completed
while
IEEE
754-‐2008
was
still
in
the
later
stages
of
development,
specifies
decimal
types
based
on
ISO/IEC/IEEE
60559:2011
decimal
formats,
though
it
does
not
include
all
of
the
operations
required
by
ISO/IEC/IEEE
60559:2011.
Purpose
The
purpose
of
ISO/IEC
TS
18661
is
to
provide
a
C
language
binding
for
ISO/IEC/IEEE
60559:2011,
based
on
the
C11
standard,
that
delivers
the
goals
of
ISO/IEC/IEEE
60559
to
users
and
is
feasible
to
implement.
It
is
organized
into
five
parts.
ISO/IEC
TS
18661-1
provides
changes
to
C11
that
cover
all
the
requirements,
plus
some
basic
recommendations,
of
ISO/IEC/IEEE
60559:2011
for
binary
floating-‐point
arithmetic.
C
implementations
intending
to
support
ISO/IEC/IEEE
60559:2011
are
expected
to
conform
to
conditionally
normative
annex
F
as
enhanced
by
the
changes
in
ISO/IEC
TS
18661-1.
ISO/IEC
TS
18661-2
enhances
ISO/IEC
TR
24732
to
cover
all
the
requirements,
plus
some
basic
recommendations,
of
ISO/IEC/IEEE
60559:2011
for
decimal
floating-‐point
arithmetic.
C
implementations
intending
to
provide
an
extension
for
decimal
floating-‐point
arithmetic
supporting
ISO/IEC/IEEE
60559:2011
are
expected
to
conform
to
ISO/IEC
TS
18661-2.
ISO/IEC
TS
18661-3
(Interchange
and
extended
types),
ISO/IEC
TS
18661-4
(Supplementary
functions),
and
ISO/IEC
TS
18661-5
(Supplementary
attributes)
cover
recommended
features
of
ISO/IEC/IEEE
60559:2011.
C
implementations
intending
to
provide
extensions
for
these
features
are
expected
to
conform
to
the
corresponding
parts.
Additional
background
on
supplementary
functions
This
document
uses
the
term
supplementary
functions
to
refer
to
functions
that
provide
operations
recommended,
but
not
required,
by
IEC
60559.
ISO/IEC/IEEE
60559:2011
specifies
and
recommends
a
more
extensive
set
of
mathematical
operations
than
C11
provides.
The
IEC
60559
specification
is
generally
consistent
with
C11,
though
it
adds
requirements
for
symmetry
and
antisymmetry.
This
part
of
ISO/IEC
TS
18661
extends
the
specification
in
Library
subclause
7.12
Mathematics
to
include
the
complete
set
of
IEC
60559
mathematical
operations.
For
implementations
conforming
to
annex
F,
it
also
requires
full
IEC
60559
semantics,
including
symmetry
and
antisymmetry
properties.
viii
©
ISO/IEC
2015
–
All
rights
reserved
---------------------- Page: 8 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
IEC
60559
requires
correct
rounding
for
its
required
operations
(squareRoot,
fusedMultiplyAdd,
etc.),
and
recommends
correct
rounding
for
its
recommended
mathematical
operations.
This
part
of
ISO/IEC
TS
18661
reserves
identifiers,
with
cr
prefixes,
for
C
functions
corresponding
to
correctly
rounded
versions
of
the
IEC
60559
mathematical
operations,
which
may
be
provided
at
the
option
of
the
implementation.
For
example,
the
identifier
crexp
is
reserved
for
a
correctly
rounded
version
of
the
exp
function.
IEC
60559
also
specifies
and
recommends
reduction
operations,
which
operate
on
vector
operands.
These
operations,
which
compute
sums
and
products,
may
associate
in
any
order
and
may
evaluate
in
any
wider
format.
Hence,
unlike
other
IEC
60559
operations,
they
do
not
have
unique
specified
results.
This
part
of
ISO/IEC
TS
18661
extends
the
specification
in
Library
subclause
7.12
Mathematics
to
include
functions
corresponding
to
the
IEC
60559
reduction
operations.
For
implementations
conforming
to
annex
F,
it
also
requires
the
IEC
60559
specified
behavior
for
floating-‐point
exceptions.
©
ISO/IEC
2015
–
All
rights
reserved
ix
---------------------- Page: 9 ----------------------
TECHNICAL
SPECIFICATION
ISO/IEC/TS
18661-‐4:2015(E)
Information
technology
—
Programming
languages,
their
environments,
and
system
software
interfaces
—
Floating-‐point
extensions
for
C
—
Part
4:
Supplementary
functions
1
Scope
This
part
of
ISO/IEC
TS
18661
extends
programming
language
C
to
include
functions
specified
and
recommended
in
ISO/IEC/IEEE
60559:2011.
2
Conformance
An
implementation
conforms
to
this
part
of
ISO/IEC
TS
18661
if
a) it
meets
the
requirements
for
a
conforming
implementation
of
C11
with
all
the
changes
to
C11
as
specified
in
parts
1-‐4
of
ISO/IEC
TS
18661;
b) it
conforms
to
ISO/IEC
TS
18661-‐1
or
ISO/IEC
TS
18661-‐2
(or
both);
and
c) it
defines
__STDC_IEC_60559_FUNCS__
to
201506L.
3
Normative
references
The
following
documents,
in
whole
or
in
part,
are
normatively
referenced
in
this
document
and
are
indispensable
for
its
application.
For
dated
references,
only
the
edition
cited
applies.
For
undated
references,
the
latest
edition
of
the
referenced
document
(including
any
amendments)
applies.
ISO/IEC
9899:2011,
Information
technology
—
Programming
languages
—
C
ISO/IEC/IEEE
60559:2011,
Information
technology
—
Microprocessor
Systems
—
Floating-‐point
arithmetic
ISO/IEC
TS
18661-‐1:2014,
Information
technology
—
Programming
languages,
their
environments
and
system
software
interfaces
—
Floating-‐point
extensions
for
C
—
Part
1:
Binary
floating-‐point
arithmetic
ISO/IEC
TS
18661-‐2:2015,
Information
technology
—
Programming
languages,
their
environments
and
system
software
interfaces
—
Floating-‐point
extensions
for
C
—
Part
2:
Decimal
floating-‐point
arithmetic
ISO/IEC
TS
18661-‐3:2015,
Information
technology
—
Programming
languages,
their
environments
and
system
software
interfaces
—
Floating-‐point
extensions
for
C
—
Part
3:
Interchange
and
extended
types
©
ISO/IEC
2015
–
All
rights
reserved
1
---------------------- Page: 10 ----------------------
ISO/IEC
TS
18661-‐4:2015(E)
4
Terms
and
definitions
For
the
purposes
of
this
document,
the
terms
and
definitions
given
in
ISO/IEC
9899:2011,
ISO/IEC/IEEE
60559:2011,
ISO/IEC
TS
18661-‐1:2014,
ISO/IEC
TS
18661-‐2:2015,
ISO/IEC
TS
18661-‐3:2015,
and
the
following
apply.
4.1
C11
standard
ISO/IEC
9899:2011,
Information
technology
—
Programming
languages
C,
including
Technical
Corrigendum
1
(ISO/IEC
9899:2011/Cor.
1:2012)
5
C
standard
conformance
5.1
Freestanding
implementations
The
specification
in
C11
+
TS18661-‐1
+
TS18661-‐2
allows
freestanding
implementations
to
conform
to
this
part
of
ISO/IEC
TS
18661.
5.2
Predefined
macros
Change
to
C11
+
TS18661-‐1
+
TS18661-‐2
+
TS18661-‐3:
In
6.10.8.3#1,
add:
__STDC_IEC_60559_FUNCS__
The
integer
constant
201506L,
intended
to
indicate
support
of
functions
specified
and
recommended
in
IEC
60559.
5.3
Standard
headers
...
Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.