Information Technology — Programming languages, their environments, and system software interfaces — Floating-point extensions for C — Part 3: Interchange and extended types

ISO/IEC TS 18661-3:2015 extends programming language C to include types with the arithmetic interchange and extended floating-­‐point formats specified in ISO/IEC/IEEE 60559:2011, and to include functions that support the non-­‐arithmetic interchange formats in that standard.

Technologies de l'information — Langages de programmation, leurs environnements et interfaces du logiciel système — Extensions à virgule flottante pour C — Partie 3: Types d'échange et étendus

General Information

Status
Published
Publication Date
05-Oct-2015
Current Stage
9093 - International Standard confirmed
Completion Date
29-Apr-2021
Ref Project

Buy Standard

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

Standards Content (Sample)

TECHNICAL ISO/IEC TS
SPECIFICATION 18661-3
First edition
2015-10-01
Information Technology —
Programming languages, their
environments, and system software
interfaces — Floating-point
extensions for C —
Part 3:
Interchange and extended types
Technologies de l’information — Langages de programmation, leurs
environnements et interfaces du logiciel système — Extensions à
virgule flottante pour C —
Partie 3: Types d’échange et étendus
Reference number
ISO/IEC TS 18661-3:2015(E)
©
ISO/IEC 2015

---------------------- Page: 1 ----------------------
ISO/IEC TS 18661-3:2015(E)
COPYRIGHT PROTECTED DOCUMENT
© ISO/IEC 2015, Published in Switzerland
�ll ri�ht� re�erved. �nle�� otherwi�e ��e�i�ied, no �art o� thi� ���li�ation �a� �e re�rod��ed or �tilized otherwi�e in an� �or�
or �� an� �ean�, ele�troni� or �e�hani�al, in�l�din� �hoto�o��in�, or �o�tin� on the internet or an intranet, witho�t �rior
written �er�i��ion. Per�i��ion �an �e re��e�ted �ro� either �S� at the addre�� �elow or �S��� �e��er �od� in the �o�ntr� o�
the requester.
�S� �o��ri�ht o��i�e
Ch. de Blandonnet 8 • CP 401
CH-1214 Vernier, Geneva, Switzerland
Tel. +41 22 749 01 11
Fax +41 22 749 09 47
�o��ri�ht�i�o.or�
www.iso.org
ii © ISO/IEC 2015 – All rights reserved

---------------------- Page: 2 ----------------------
ISO/IEC
 TS
 18661-­‐3:2015(E)

Foreword
 .
 iv

Introduction
 .
 vi

1
  Scope
 .
 1

2
  Conformance
 .
 1

3
  Normative
 references
 .
 1

4
  Terms
 and
 definitions
 .
 1

5
  C
 standard
 conformance
 .
 2

5.1
  Freestanding
 implementations
 .
 2

5.2
  Predefined
 macros
 .
 2

5.3
  Standard
 headers
 .
 2

6
  Types
 .
 8

7
  Characteristics
 .
 13

8
  Conversions
 .
 19

9
  Constants
 .
 21

10
  Expressions
 .
 22

11
  Non-­‐arithmetic
 interchange
 formats
 .
 23

12
  Mathematics
 
 .
 23

12.1
  Macros
 .
 25

12.2
  Floating-­‐point
 environment
 .
 29

12.3
  Functions
 .
 31

12.4
  Encoding
 conversion
 functions
 .
 42

13
  Numeric
 conversion
 functions
 in
 
 .
 45

14
  Complex
 arithmetic
 
 .
 51

15
  Type-­‐generic
 macros
 
 .
 54

Bibliography
 .
 58






©
 ISO/IEC
 2015
 –
 All
 rights
 reserved
  iii

---------------------- Page: 3 ----------------------
ISO/IEC
 TS
 18661-­‐3: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-­‐3: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
 2015
 –
 All
 rights
 reserved
  v

---------------------- Page: 5 ----------------------
ISO/IEC
 TS
 18661-­‐3: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-­‐3: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-­‐3: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
 formats

The
 revised
 floating-­‐point
 arithmetic
 standard,
 ISO/IEC/IEEE
 60559:2011,
 introduces
 a
 variety
 of
 new

formats,
 both
 fixed
 and
 extendable.
 The
 new
 fixed
 formats
 include


  a
 128-­‐bit
 basic
 binary
 format
 (the
 32
 and
 64
 bit
 basic
 binary
 formats
 are
 carried
 over
 from
 ISO/IEC

60559:1989)


  64
 and
 128
 bit
 basic
 decimal
 formats


viii
  ©
 ISO/IEC
 2015
 –
 All
 rights
 reserved

---------------------- Page: 8 ----------------------
ISO/IEC
 TS
 18661-­‐3:2015(E)


  interchange
 formats,
 whose
 precision
 and
 range
 are
 determined
 by
 the
 width
 k,
 where


for
 binary,
 k
 =
 16,
 32,
 64,
 and
 k
 ≥
 128
 and
 a
 multiple
 of
 32,
 and

for
 decimal,
 k
 ≥
 32
 and
 a
 multiple
 of
 32


  extended
 formats,
 for
 each
 basic
 format,
 with
 minimum
 range
 and
 precision
 specified


Thus
  IEC
  60559
  defines
  five
  basic
  formats
  —
  binary32,
  binary64,
  binary128,
  decimal64,
  and

decimal128
 —
 and
 five
 corresponding
 extended
 formats,
 each
 with
 somewhat
 more
 precision
 and

range
 than
 the
 basic
 format
 it
 extends.
 IEC
 60559
 defines
 an
 unlimited
 number
 of
 interchange
 formats,

which
 include
 the
 basic
 formats.


Interchange
 formats
 may
 or
 may
 not
 be
 supported
 as
 arithmetic
 formats.
 If
 not,
 they
 may
 be
 used
 for

the
  interchange
  of
  floating-­‐point
  data
  but
  not
  for
  arithmetic
  computation.
  IEC
  60559
  provides

conversions
 between
 non-­‐arithmetic
 interchange
 formats
 and
 arithmetic
 formats
 which
 can
 be
 used
 for

computation.

Extended
 formats
 are
 intended
 for
 intermediate
 computation,
 not
 input
 or
 output
 data.
 The
 extra

precision
 often
 allows
 the
 computation
 of
 extended
 results
 which
 when
 converted
 to
 a
 narrower
 output

format
 differ
 from
 the
 ideal
 results
 by
 little
 more
 than
 a
 unit
 in
 the
 last
 place.
 Also,
 the
 extra
 range
 often

avoids
 any
 intermediate
 overflow
 or
 underflow
 that
 might
 occur
 if
 the
 computation
 were
 done
 in
 the

format
 of
 the
 data.
 The
 essential
 property
 of
 extended
 formats
 is
 their
 sufficient
 extra
 widths,
 not
 their

specific
 widths.
 Extended
 formats
 for
 any
 given
 basic
 format
 may
 vary
 among
 implementations.

Extendable
 formats,
 which
 provide
 user
 control
 over
 range
 and
 precision,
 are
 not
 covered
 in
 ISO/IEC

TS
 18661.

The
  32
  and
  64
  bit
  binary
  formats
  are
  supported
  in
  C
  by
  types
  float
  and
  double.
  If
  a
  C

implementation
 defines
 the
 macro
 __STDC_IEC_60559_BFP__
 (see
 ISO/IEC
 TS
 18661-­‐1)
 signifying

that
 it
 supports
 C
 Annex
 F
 for
 binary
 floating-­‐point
 arithmetic,
 then
 its
 float
 and
 double
 formats

must
 be
 IEC
 60559
 binary32
 and
 binary64.

ISO/IEC
 TS
 18661-­‐2
 defines
 types
 _Decimal32,
 _Decimal64,
 and
 _Decimal128
 with
 IEC
 60559

formats
  decimal32,
  decimal64,
  and
  decimal128.
  Although
  IEC
  60559
  does
  not
  require
  arithmetic

support
 (other
 than
 conversions)
 for
 its
 decimal32
 interchange
 format,
 ISO/IEC
 TS
 18661-­‐2
 has
 full

arithmetic
 and
 library
 support
 for
 _Decimal32,
 just
 like
 for
 _Decimal64
 and
 _Decimal128.

The
 C
 Standard
 provides
 just
 three
 standard
 floating
 types
 (float,
 double,
 and
 long double)
 that

are
  required
  of
  all
  implementations.
  C
  Annex
  F
  for
  binary
  floating-­‐point
  arithmetic
  requires
  the

standard
 floating
 types
 to
 be
 binary.
 The
 long double
 type
 must
 be
 at
 least
 as
 wide
 as
 double,
 but
 C

does
 not
 further
 specify
 details
 of
 its
 format,
 even
 in
 Annex
 F.

ISO/IEC
 TS
 18661-­‐3,
 this
 document,
 provides
 nomenclatures
 for
 types
 with
 IEC
 60559
 arithmetic

interchange
 formats
 and
 extended
 formats.
 The
 nomenclatures
 allow
 portable
 use
 of
 the
 formats
 as

envisioned
 in
 IEC
 60559.
 This
 document
 covers
 these
 aspects
 of
 the
 types:

— names


— characteristics


— conversions


©
 ISO/IEC
 2015
 –
 All
 rights
 reserved
  ix

---------------------- Page: 9 ----------------------
ISO/IEC
 TS
 18661-­‐3:2015(E)

— constants

— function
 suffixes

— character
 sequence
 conversion
...

Questions, Comments and Discussion

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