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-2:2015 extends programming language C as specified in ISO/IEC 9899:2011, (C11) with changes specified in ISO/IEC/TS 18661-1, to support decimal floating-point arithmetic conforming to ISO/IEC/IEEE 60559:2011. It covers all requirements of IEC 60559 as they pertain to C decimal floating types. ISO/IEC/TS 18661-2:2015 does not cover binary floating-point arithmetic (which is covered in ISO/IEC/TS 18661-1), nor does it cover most optional features of IEC 60559.

Technologies de l'information — Langages de programmation, leurs environnements et interfaces du logiciel système — Extensions à virgule flottante pour C — Partie 2: Arithmétique décimal en virgule flottante

General Information

Status
Published
Publication Date
17-May-2015
Current Stage
9599 - Withdrawal of International Standard
Start Date
09-Sep-2025
Completion Date
30-Oct-2025
Ref Project

Relations

Overview

ISO/IEC TS 18661-2:2015 - "Floating‑point extensions for C - Part 2: Decimal floating‑point arithmetic" - is a Technical Specification that extends the C11 language (ISO/IEC 9899:2011) to support decimal floating‑point arithmetic in conformance with ISO/IEC/IEEE 60559:2011 (IEEE 754‑2008). It defines decimal floating types, their characteristics, conversions, arithmetic operations and library support in C. This TS addresses the C language requirements needed to implement IEC 60559 decimal features; it does not cover binary floating‑point (see TS 18661‑1) nor most optional IEC 60559 features.

Key topics and requirements

  • Decimal floating types: specification of new decimal types and their properties as they relate to C (characteristics exposed in <float.h>).
  • Conformance and language integration: rules for C standard conformance, freestanding implementations, predefined macros and required standard headers.
  • Arithmetic and conversions: operator and function semantics for decimal arithmetic, conversions between decimal, integer, complex and standard floating types, and usual arithmetic conversions.
  • Library interfaces: additions and extensions to standard headers including:
    • <float.h> (characteristics)
    • <fenv.h> (decimal floating‑point environment and exception flags)
    • <math.h> (decimal mathematics and decimal‑only functions, e.g., quantum/quantum‑exponent and re‑encoding utilities)
    • <tgmath.h>, <stdlib.h>, <wchar.h> (type‑generic math, strtodN/wcstodN, strfromdN)
    • Formatted I/O specifiers for decimal types
  • Expression evaluation and operation binding: rules for expression transformations and rounding/exception behavior consistent with IEC 60559.
  • Scope limits: required behavior that implements IEC 60559 for decimal types; optional IEC 60559 features largely not covered.

Practical applications

  • Financial and commercial software where exact decimal representation and predictable rounding matter (accounting, billing, tax calculations).
  • Databases, reporting systems and business logic that require decimal currency and fixed‑scale arithmetic.
  • Compiler and standard library developers implementing C support for IEEE 754 decimal formats and portable APIs.
  • Embedded and safety‑critical systems that need standardized decimal semantics and reproducible numeric results.
  • Numerical software testing, porting and conformance verification for systems claiming IEC 60559 decimal support.

Who should use this standard

  • Compiler vendors and runtime/library implementers
  • Financial software engineers and numerical analysts
  • Standards bodies, QA teams, and certification labs
  • Embedded systems developers needing predictable decimal behavior

Related standards

  • ISO/IEC 9899:2011 (C11) - base C standard
  • ISO/IEC/IEEE 60559:2011 (IEEE 754‑2008) - floating‑point arithmetic model (decimal formats)
  • ISO/IEC TS 18661‑1 - binary floating‑point extensions for C
  • ISO/IEC TR 24732:2009 - superseded by TS 18661‑2

Keywords: ISO/IEC TS 18661-2:2015, decimal floating-point, C11, IEEE 754, IEC 60559, decimal floating types, <fenv.h>, <math.h>, floating-point extensions for C.

Technical specification
ISO/IEC TS 18661-2:2015 - Information Technology -- Programming languages, their environments, and system software interfaces -- Floating-point extensions for C
English language
55 pages
sale 15% off
Preview
sale 15% off
Preview

Frequently Asked Questions

ISO/IEC TS 18661-2:2015 is a technical specification published by the International Organization for Standardization (ISO). Its full title is "Information Technology - Programming languages, their environments, and system software interfaces - Floating-point extensions for C - Part 2: Decimal floating-point arithmetic". This standard covers: ISO/IEC/TS 18661-2:2015 extends programming language C as specified in ISO/IEC 9899:2011, (C11) with changes specified in ISO/IEC/TS 18661-1, to support decimal floating-point arithmetic conforming to ISO/IEC/IEEE 60559:2011. It covers all requirements of IEC 60559 as they pertain to C decimal floating types. ISO/IEC/TS 18661-2:2015 does not cover binary floating-point arithmetic (which is covered in ISO/IEC/TS 18661-1), nor does it cover most optional features of IEC 60559.

ISO/IEC/TS 18661-2:2015 extends programming language C as specified in ISO/IEC 9899:2011, (C11) with changes specified in ISO/IEC/TS 18661-1, to support decimal floating-point arithmetic conforming to ISO/IEC/IEEE 60559:2011. It covers all requirements of IEC 60559 as they pertain to C decimal floating types. ISO/IEC/TS 18661-2:2015 does not cover binary floating-point arithmetic (which is covered in ISO/IEC/TS 18661-1), nor does it cover most optional features of IEC 60559.

ISO/IEC TS 18661-2:2015 is classified under the following ICS (International Classification for Standards) categories: 35.060 - Languages used in information technology. The ICS classification helps identify the subject area and facilitates finding related standards.

ISO/IEC TS 18661-2:2015 has the following relationships with other standards: It is inter standard links to ISO/IEC TR 24732:2009, ISO/IEC TS 18661-2:2015. Understanding these relationships helps ensure you are using the most current and applicable version of the standard.

You can purchase ISO/IEC TS 18661-2:2015 directly from iTeh Standards. The document is available in PDF format and is delivered instantly after payment. Add the standard to your cart and complete the secure checkout process. iTeh Standards is an authorized distributor of ISO standards.

Standards Content (Sample)


TECHNICAL ISO/IEC TS
SPECIFICATION 18661-2
Second edition
2015-05-15
Information Technology —
Programming languages, their
environments, and system software
interfaces — Floating-point
extensions for C —
Part 2:
Decimal floating-point arithmetic
Technologies de l’information — Langages de programmation, leurs
environnements et interfaces du logiciel système — Extensions à
virgule flottante pour C —
Partie 2: Arithmétique décimal en virgule flottante
Reference number
©
ISO/IEC 2015
© ISO/IEC 2015
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
Case postale 56 • CH-1211 Geneva 20
Tel. + 41 22 749 01 11
Fax + 41 22 749 09 47
E-mail copyright@iso.org
Web www.iso.org
Published in Switzerland
ii © ISO/IEC 2015 – All rights reserved

ISO/IEC
TS
18661-­‐2:2015(E)
Foreword
.......................................................................................................................................................
iv
Introduction
.................................................................................................................................................
vi
Scope
.........................................................................................................................................................
Conformance
..........................................................................................................................................
Normative
references
.........................................................................................................................
Terms
and
definitions
.........................................................................................................................
C
standard
conformance
....................................................................................................................
5.1
Freestanding
implementations
...............................................................................................................
5.2
Predefined
macros
.......................................................................................................................................
5.3
Standard
headers
.........................................................................................................................................
Decimal
floating
types
.........................................................................................................................
Characteristics
of
decimal
floating
types

...........................................................
Operation
binding
..............................................................................................................................
Conversions
..........................................................................................................................................
9.1
Conversions
between
decimal
floating
and
integer
types
............................................................
9.2
Conversions
among
decimal
floating
types,
and
between
decimal
floating
and
standard
floating
types
..........................................................................................................................................................
9.3
Conversions
between
decimal
floating
and
complex
types
.........................................................
9.4
Usual
arithmetic
conversions
................................................................................................................
9.5
Default
argument
promotion
.................................................................................................................
Constants
............................................................................................................................................
Arithmetic
operations
....................................................................................................................
11.1
Operators
....................................................................................................................................................
11.2
Functions
....................................................................................................................................................
11.3
Conversions
...............................................................................................................................................
11.4
Expression
transformations
................................................................................................................
Library
.................................................................................................................................................
12.1
Standard
headers
.....................................................................................................................................
12.2
Decimal
floating-­‐point
environment
in

......................................................................
12.3
Decimal
mathematics
in

..................................................................................................
12.4
Decimal-­‐only
functions
in

...............................................................................................
12.4.1
Quantum
and
quantum
exponent
functions
............................................................................................
12.4.2
Decimal
re-­‐encoding
functions
......................................................................................................................
12.5
Formatted
input/output
specifiers
...................................................................................................
12.6
strtodN
functions
in

..................................................................................................
12.7
wcstodN
functions
in

.....................................................................................................
12.8
strfromdN
functions
in

.............................................................................................
12.9
Type-­‐generic
math
for
decimal
in

...........................................................................
©
ISO/IEC

All
rights
reserved
iii
ISO/IEC
TS
18661-­‐2: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
(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.
This second edition cancels and replaces the first edition (ISO/IEC TS 18661-2:2015), of which it constitutes
a minor revision.
ISO/IEC
TS
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
The
following
parts
are
under
preparation:
⎯ Part
3:
Interchange
and
extended
types
⎯ Part
4:
Supplementary
functions
⎯ 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

All
rights
reserved
ISO/IEC
TS
18661-­‐2:2015(E)
ISO/IEC
TS
18661-­‐3,
ISO/IEC
TS
18661-­‐4,
and
ISO/IEC
TS
18661-­‐5
specify
extensions
to
ISO/IEC
9899:2011
for
features
recommended
in
ISO/IEC/IEEE
60559:2011.
©
ISO/IEC

All
rights
reserved
v
ISO/IEC
TS
18661-­‐2:2015(E)
Introduction
Background
IEC
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

All
rights
reserved
ISO/IEC
TS
18661-­‐2: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
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
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

All
rights
reserved
vii
ISO/IEC
TS
18661-­‐2: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
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
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/IECIEEE
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
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
decimal
floating-­‐point
arithmetic
Most
of
today's
general-­‐purpose
computing
architectures
provide
binary
floating-­‐point
arithmetic
in
hardware.
Binary
floating
point
is
an
efficient
representation
that
minimizes
memory
use,
and
is
simpler
to
implement
than
floating-­‐point
arithmetic
using
other
bases.
It
has
therefore
become
the
norm
for
scientific
computations,
with
almost
all
implementations
following
the
IEEE
standard
for
binary
floating-­‐point
arithmetic
(and
the
equivalent
international
ISO/IEC/IEEE
standard).
However,
human
computation
and
communication
of
numeric
values
almost
always
uses
decimal
arithmetic
and
decimal
notations.
Laboratory
notes,
scientific
papers,
legal
documents,
business
reports,
and
financial
statements
all
record
numeric
values
in
decimal
form.
When
numeric
data
are
given
to
a
program
or
are
displayed
to
a
user,
conversion
between
binary
and
decimal
is
required.
There
are
inherent
rounding
errors
involved
in
such
conversions;
decimal
fractions
cannot,
in
general,
viii
©
ISO/IEC

All
rights
reserved
ISO/IEC
TS
18661-­‐2:2015(E)
be
represented
exactly
by
binary
floating-­‐point
values.
These
errors
often
cause
usability
and
efficiency
problems,
depending
on
the
application.
These
problems
are
minor
when
the
application
domain
accepts,
or
requires
results
to
have,
associated
error
estimates
(as
is
the
case
with
scientific
applications).
However,
in
business
and
financial
applications,
computations
are
either
required
to
be
exact
(with
no
rounding
errors)
unless
explicitly
rounded,
or
be
supported
by
detailed
analyses
that
are
auditable
to
be
correct.
Such
applications
therefore
have
to
take
special
care
in
handling
any
rounding
errors
introduced
by
the
computations.
The
most
efficient
way
to
avoid
conversion
error
is
to
use
decimal
arithmetic.
Currently,
the
IBM
z/Architecture
(and
its
predecessors
since
System/360)
is
a
widely
used
system
that
supports
built-­‐in
decimal
arithmetic.
Prior
to
the
IBM
System
z10
processor,
however,
this
provided
integer
arithmetic
only,
meaning
that
every
number
and
computation
has
to
have
separate
scale
information
preserved
and
computed
in
order
to
maintain
the
required
precision
and
value
range.
Such
scaling
is
difficult
to
code
and
is
error-­‐prone;
it
affects
execution
time
significantly,
and
the
resulting
program
is
often
difficult
to
maintain
and
enhance.
Even
though
the
hardware
might
not
provide
decimal
arithmetic
operations,
the
support
can
still
be
emulated
by
software.
Programming
languages
used
for
business
applications
either
have
native
decimal
types
(such
as
PL/I,
COBOL,
REXX,
C#,
or
Visual
Basic)
or
provide
decimal
arithmetic
libraries
(such
as
the
BigDecimal
class
in
Java).
The
arithmetic
used
in
business
applications,
nowadays,
is
almost
invariably
decimal
floating-­‐point;
the
COBOL
ISO
standard,
for
example,
requires
that
all
standard
decimal
arithmetic
calculations
use
32-­‐digit
decimal
floating-­‐point.
The
IEEE
has
recognized
this
importance.
Decimal
floating-­‐point
formats
and
arithmetic
are
major
new
features
in
the
IEEE
754-­‐2008
standard
and
its
international
equivalent
ISO/IEC/IEEE
60559:2011.
©
ISO/IEC

All
rights
reserved
ix
TECHNICAL
SPECIFICATION
ISO/IEC/TS
18661-­‐2:2015(E)
Information
technology

Programming
languages,
their
environments,
and
system
software
interfaces

Floating-­‐point
extensions
for
C

Part
2:
Decimal
floating-­‐point
arithmetic
Scope
This
part
of
ISO/IEC
TS
extends
programming
language
C,
as
specified
in
ISO/IEC
9899:2011
(C11)
with
changes
specified
in
ISO/IEC
TS
18661-­‐1,
to
support
decimal
floating-­‐point
arithmetic
conforming
to
ISO/IEC/IEEE
60559:2011.
It
covers
all
requirements
of
IEC
as
they
pertain
to
C
decimal
floating
types.
This
part
of
ISO/IEC
TS
supersedes
ISO/IEC
TR
24732:2009.
This
part
of
ISO/IEC
TS
does
not
cover
binary
floating-­‐point
arithmetic
(which
is
covered
in
ISO/IEC
TS
18661-­‐1),
nor
does
it
cover
most
optional
features
of
IEC
60559.
Conformance
An
implementation
conforms
to
this
part
of
ISO/IEC
TS
if
a)
it
meets
the
requirements
for
a
conforming
implementation
of
C11
with
all
the
changes
to
C11
specified
in
ISO/IEC
TS
18661-­‐1
and
in
this
part
of
ISO/IEC
TS
18661;
and
b)
it
defines
__STDC_IEC_60559_DFP__
to
201504L.
NOTE
Conformance
to
this
part
of
ISO/IEC
TS
does
not
include
all
the
requirements
of
ISO/IEC
TS
18661-­‐1.
An
implementation
may
conform
to
either
or
both
of
ISO/IEC
TS
18661-­‐1
and
ISO/IEC
TS
18661-­‐2.
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

All
rights
reserved
ISO/IEC
TS
18661-­‐2:2015(E)
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,
and
the
following
apply.
4.1
C11
standard
ISO/IEC
9899:2011,
Information
technology

Programming
languages

C,
including
Technical
Corrigendum
(ISO/IEC
9899:2011/Cor.
1:2012)
C
standard
conformance
5.1
Freestanding
implementations
The
following
change
to
C11
+
TS18661-­‐1
expands
the
conformance
requirements
for
freestanding
implementations
so
that
they
might
conform
to
this
part
of
ISO/IEC
TS
18661.
Change
to
C11
+
TS18661-­‐1:
Replace
the
fourth
sentence
of
4#6:
The
strictly
conforming
programs
that
shall
be
accepted
by
a
conforming
freestanding
implementation
that
defines
__STDC_IEC_60559_BFP__
may
also
use
features
in
the
contents
of
the
standard
headers

and

and
the
numeric
conversion
functions
(7.22.1)
of
the
standard
header
.
with:
The
strictly
conforming
programs
that
shall
be
accepted
by
a
conforming
freestanding
implementation
that
defines
__STDC_IEC_60559_BFP__
or
__STDC_IEC_60559_DFP__
may
also
use
features
in
the
contents
of
the
standard
headers

and

and
the
numeric
conversion
functions
(7.22.1)
of
the
standard
header
.
5.2
Predefined
macros
The
following
change
to
C11
+
TS18661-­‐1
replaces
__STDC_DEC_FP__,
the
conformance
macro
for
decimal
floating-­‐point
arithmetic
specified
in
TR
24732,
with
__STDC_IEC_60559_DFP__,
for
consistency
with
the
conformance
macro
for
ISO/IEC
TS
18661-­‐1.
Note
that
an
implementation
may
continue
to
define
__STDC_DEC_FP__,
so
that
programs
that
use
__STDC_DEC_FP__
may
remain
valid
under
the
changes
in
ISO/IEC
TS
18661-­‐2.
Change
to
C11
+
TS18661-­‐1:
In
6.10.8.3#1,
add:
__STDC_IEC_60559_DFP__
The
integer
constant
201504L,
intended
to
indicate
support
of
decimal
floating
types
and
conformance
with
annex
F
for
IEC
decimal
floating-­‐point
arithmetic.
The
following
change
to
C11
+
TS18661-­‐1
specifies
the
applications
of
annex
F
to
binary
and
decimal
floating-­‐point
arithmetic.
©
ISO/IEC

All
rights
reserved
ISO/IEC
TS
18661-­‐2:2015(E)
Change
to
C11
+
TS18661-­‐1:
Replace
F.1#3:
[3]
An
implementation
that
defines
__STDC_IEC_60559_BFP__
to
201404L
shall
conform
to
the
specifications
in
this
annex.356)
Where
a
binding
between
the
C
language
and
IEC
is
indicated,
the
IEC
60559-­‐specified
behavior
is
adopted
by
reference,
unless
stated
otherwise.
with:
[3]
An
implementation
that
defines
__STDC_IEC_60559_BFP__
to
201404L
shall
conform
to
the
specifications
in
this
annex
for
binary
floating-­‐point
arithmetic.356)
[4]
An
implementation
that
defines
__STDC_IEC_60559_DFP__
to
201504L
shall
conform
to
the
specifications
for
decimal
floating-­‐point
arithmetic
in
the
following
subclauses
of
this
annex:

F.2.1
Infinities
and
NaNs

F.3
Operations

F.4
Floating
to
integer
conversions

F.6
The
return
statement

F.7
Contracted
expressions

F.8
Floating-­‐point
environment

F.9
Optimization

F.10
Mathematics

For
the
purpose
of
specifying
these
conformance
requirements,
the
macros,
functions,
and
values
mentioned
in
the
subclauses
listed
above
are
understood
to
refer
to
the
corresponding
macros,
functions,
and
values
for
decimal
floating
types.
Likewise,
the
“rounding
direction
mode”
is
understood
to
refer
to
the
rounding
direction
mode
for
decimal
floating-­‐point
arithmetic.
[5]
Where
a
binding
between
the
C
language
and
IEC
is
indicated,
the
IEC
60559-­‐
specified
behavior
is
adopted
by
reference,
unless
stated
otherwise.
5.3
Standard
headers
The
new
identifiers
added
to
C11
library
headers
by
this
part
of
ISO/IEC
TS
are
defined
or
declared
by
their
respective
headers
only
if
__STDC_WANT_IEC_60559_DFP_EXT__ is
defined
as
a
macro
at
the
point
in
the
source
file
where
the
appropriate
header
is
first
included.
The
macro
__STDC_WANT_IEC_60559_DFP_EXT__
replaces
the
macro
__STDC_WANT_DEC_FP__
specified
in
TR
for
the
same
purpose.
The
following
changes
to
C11
+
TS18661-­‐1
list
these
identifiers
in
each
applicable
library
subclause.
©
ISO/IEC

All
rights
reserved
ISO/IEC
TS
18661-­‐2:2015(E)
Changes
to
C11
+
TS18661-­‐1:
In
5.2.4.2.1#1a,
change:
[1a]
The
following
identifiers
are
defined
only
if
__STDC_WANT_IEC_60559_BFP_EXT__
is
defined
as
a
macro
at
the
point
in
the
source
file
where

is
first
included:
to:
[1a]
The
following
identifiers
are
defined
only
if
__STDC_WANT_IEC_60559_BFP_EXT__
or
__STDC_WANT_IEC_60559_DFP_EXT__
is
defined
as
a
macro
at
the
point
in
the
source
file
where

is
first
included:
After
5.2.4.2.2#6a,
insert
the
paragraph:
[6b]
The
following
identifiers
are
defined
only
if
__STDC_WANT_IEC_60559_DFP_EXT__
is
defined
as
a
macro
at
the
point
in
the
source
file
where

is
first
included:
for
N
=
32,
64,
and
128:
DECN_MANT_DIG DECN_MAX DECN_TRUE_MIN
DECN_MIN_EXP DECN_EPSILON
DECN_MAX_EXP DECN_MIN
After
7.6#3a,
insert
the
paragraph:
[3b]
The
following
identifiers
are
declared
only
if
__STDC_WANT_IEC_60559_DFP_EXT__
is
defined
as
a
macro
at
the
point
in
the
source
file
where

is
first
included:
fe_dec_getround fe_dec_setround

Change
7.12#1a
from:
[1a]
The
following
identifiers
are
defined
or
declared
only
if
__STDC_WANT_IEC_60559_BFP_EXT__
is
defined
as
a
macro
at
the
point
in
the
source
file
where

is
first
included:
FP_INT_UPWARD FP_FAST_FSUB
FP_INT_DOWNWARD FP_FAST_FSUBL
FP_INT_TOWARDZERO FP_FAST_DSUBL
FP_INT_TONEARESTFROMZERO FP_FAST_FMUL
FP_INT_TONEAREST FP_FAST_FMULL
FP_LLOGB0 FP_FAST_DMULL
FP_LLOGBNAN FP_FAST_FDIV
SNANF FP_FAST_FDIVL
SNAN FP_FAST_DDIVL
SNANL FP_FAST_FSQRT
FP_FAST_FADD FP_FAST_FSQRTL
FP_FAST_FADDL FP_FAST_DSQRTL
FP_FAST_DADDL
©
ISO/IEC

All
rights
reserved
ISO/IEC
TS
18661-­‐2:2015(E)
iseqsig fmaxmagf ffmal
iscanonical fmaxmagl dfmal
issignaling fminmag fsqrt
issubnormal fminmagf fsqrtl
iszero fminmagl dsqrtl
fromfp nextup totalorder
fromfpf nextupf totalorderf
fromfpl nextupl totalorderl
ufromfp nextdown totalordermag
ufromfpf nextdownf totalordermagf
ufromfpl nextdownl totalordermagl
fromfpx fadd canonicalize
fromfpxf faddl canonicalizef
fromfpxl daddl canonicalizel
ufromfpx fsub getpayload
ufromfpxf fsubl getpayloadf
ufromfpxl dsubl getpayloadl
roundeven fmul setpayload
roundevenf fmull setpayloadf
roundevenl dmull setpayloadl
llogb fdiv setpayloadsig
llogbf fdivl setpayloadsigf
llogbl ddivl setpayloadsigl
fmaxmag ffma
to:
[1a]
The
following
identifiers
are
defined
only
if
__STDC_WANT_IEC_60559_BFP_EXT__
or
__STDC_WANT_IEC_60559_DFP_EXT__
is
defined
as
a
macro
at
the
point
in
the
source
file
where

is
first
included:
FP_INT_UPWARD FP_LLOGBNAN
FP_INT_DOWNWARD iseqsig
FP_INT_TOWARDZERO iscanonical
FP_INT_TONEARESTFROMZERO issignaling
FP_INT_TONEAREST issubnormal
FP_LLOGB0 iszero
©
ISO/IEC

All
rights
reserved
ISO/IEC
TS
18661-­‐2:2015(E)
[1b]
The
following
identifiers
are
defined
or
declared
only
if
__STDC_WANT_IEC_60559_BFP_EXT__
is
defined
as
a
macro
at
the
point
in
the
source
file
where

is
first
included:
SNANF ufromfpxf dmull
SNAN ufromfpxl fdiv
SNANL roundeven fdivl
FP_FAST_FADD roundevenf ddivl
FP_FAST_FADDL roundevenl ffma
FP_FAST_DADDL llogb ffmal
FP_FAST_FSUB llogbf dfmal
FP_FAST_FSUBL llogbl fsqrt
FP_FAST_DSUBL fmaxmag fsqrtl
FP_FAST_FMUL fmaxmagf dsqrtl
FP_FAST_FMULL fmaxmagl totalorder
FP_FAST_DMULL fminmag totalorderf
FP_FAST_FDIV fminmagf totalorderl
FP_FAST_FDIVL fminmagl totalordermag
FP_FAST_DDIVL nextup totalordermagf
FP_FAST_FSQRT nextupf totalordermag
...

Questions, Comments and Discussion

Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.

Loading comments...

ISO/IEC TS 18661-2:2015 is an extension to the programming language C that adds support for decimal floating-point arithmetic. It specifically conforms to the standards set by ISO/IEC/IEEE 60559:2011. This extension covers all the requirements of IEC 60559 for C decimal floating types. However, it does not cover binary floating-point arithmetic, which is addressed in ISO/IEC/TS 18661-1. Additionally, it does not include most optional features of IEC 60559.