Information Technology — Programming languages, their environments, and system software interfaces — Floating-point extensions for C — Part 5: Supplementary attributes

ISO/IEC TS 18661-5:2016 extends programming language C to include support for attributes 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 5: Attributs supplémentaires

General Information

Status
Published
Publication Date
10-Aug-2016
Current Stage
9599 - Withdrawal of International Standard
Due Date
14-Mar-2025
Completion Date
14-Mar-2025
Ref Project

Relations

Buy Standard

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

Standards Content (Sample)


TECHNICAL ISO/IEC TS
SPECIFICATION 18661-5
First edition
Information Technology —
Programming languages, their
environments, and system software
interfaces — Floating-point
extensions for C —
Part 5:
Supplementary attributes
Technologies de l?information — Langages de programmation, leurs
environnements et interfaces du logiciel systeme — Extensions a
virgule flottante pour C —
Partie 5: Attributs supplémentaires
PROOF/ÉPREUVE
Reference number
©
ISO/IEC 2016
© ISO/IEC 2016, 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 2016 – All rights reserved

ISO/IEC TS 18661-5:2016(E)
Foreword . iv
Introduction . v
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
6 Standard pragmas . 2
7 Evaluation formats . 3
8 Optimization controls . 6
9 Reproducibility . 11
10 Alternate exception handling . 14
Bibliography . 24

© ISO/IEC 2016 – All rights reserved iii

ISO/IEC TS 18661-5:2016(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
⎯ 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.
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.
iv © ISO/IEC 2016 – All rights reserved

ISO/IEC TS 18661-5:2016(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
© ISO/IEC 2016 – All rights reserved v

ISO/IEC TS 18661-5:2016(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.
vi © ISO/IEC 2016 – All rights reserved

ISO/IEC TS 18661-5:2016(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/
...


TECHNICAL ISO/IEC TS
SPECIFICATION 18661-5
First edition
2016-08-15
Information Technology —
Programming languages, their
environments, and system software
interfaces — Floating-point
extensions for C —
Part 5:
Supplementary attributes
Technologies de l’information — Langages de programmation, leurs
environnements et interfaces du logiciel système — Extensions à
virgule flottante pour C —
Partie 5: Attributs supplémentaires
Reference number
©
ISO/IEC 2016
© ISO/IEC 2016, 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 2016 – All rights reserved

ISO/IEC TS 18661-5:2016(E)
Foreword . iv
Introduction . v
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
6 Standard pragmas . 2
7 Evaluation formats . 3
8 Optimization controls . 6
9 Reproducibility . 11
10 Alternate exception handling . 14
Bibliography . 24

© ISO/IEC 2016 – All rights reserved iii

ISO/IEC TS 18661-5:2016(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
⎯ 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.
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.
iv © ISO/IEC 2016 – All rights reserved

ISO/IEC TS 18661-5:2016(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
© ISO/IEC 2016 – All rights reserved v

ISO/IEC TS 18661-5:2016(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.
vi © ISO/IEC 2016 – All rights reserved

ISO/IEC TS 18661-5:2016(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
...

Questions, Comments and Discussion

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