Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
The ISO/IEC 10967 series, known as Language Independent Arithmetic (LIA), defines core computational environments to ensure portability and predictability of numerical software across diverse programming languages and hardware platforms. While Part 1 covers basic integer and floating-point arithmetic and Part 2 covers elementary numerical functions on real numbers, Part 3 (ISO/IEC 10967-3:2006) extends this framework into the complex domain.
This article provides a technical overview of ISO/IEC 10967-3:2006, detailing its scope, rigorous technical requirements for complex integer and floating-point arithmetic, critical implementation considerations regarding principal values and branch cuts, and the necessary steps for compliance verification.
ISO/IEC 10967-3:2006 defines the properties of complex integer and complex floating-point arithmetic for a computational environment, known as LIAC. It is inherently dependent on the foundations laid by LIA-1 and LIA-2. The standard does not prescribe specific algorithms but mandates the results of operations, ensuring that a program migrated from one conforming implementation to another yields mathematically identical results.
The standard specifies that complex integer arithmetic must be exact, except for division. For division, the result is a complex rational number, which cannot generally be represented as a complex integer. Therefore, LIA-3 specifies the semantics of the Div and Rem (division and remainder) operations returning complex integers, similar to how integer division works in LIA-1.
CFLX arithmetic operates component-wise but must adhere to specific algebraic properties. The standard strictly requires conformance to the rounding modes and exception handling of IEC 60559. A critical requirement involves the handling of signed zeros and infinities.
Perhaps the most significant contribution of ISO/IEC 10967-3 is the precise definition of the principal values and branch cuts for complex elementary functions. Mathematical functions like log(z) and sqrt(z) are multi-valued in the complex plane. To be useful in programming, a single, continuous branch must be chosen. LIA-3 selects these branches based on standard mathematical convention (specifically, following the principles outlined by Kahan and other numerical analysts).
The standard explicitly defines the behavior along branch cuts, often specifying the behavior based on the sign of zero. For example, the complex logarithm ln(z) has a branch cut along the negative real axis (excluding 0). The standard defines this boundary and how the sign of the imaginary part determines the limit.
Table 1: Principal Values and Branch Cuts for Key Complex Functions
| Function | Expression / Definition | Branch Cut(s) | Range (Principal Value) |
|---|---|---|---|
| Complex Logarithm | ln(z) = ln|z| + i · arg(z) | Negative real axis (-∞, 0) | Im(ln(z)) ∈ (-π, π] |
| Complex Square Root | sqrt(z) = e^(½ ln(z)) | Negative real axis (-∞, 0) | Re(sqrt(z)) ≥ 0 (Re = 0 ⇒ Im ≥ 0) |
| Complex Arc Sine | arcsin(z) = -i · ln(i·z + sqrt(1 – z²)) | (-∞, -1) and (1, ∞) on the real axis | Re(arcsin(z)) ∈ [-π/2, π/2] |
| Complex Arc Tangent | arctan(z) = i/2 · ln((i+z)/(i-z)) | (-i∞, -i) and (i, i∞) on the imaginary axis | Re(arctan(z)) ∈ [-π/2, π/2] |
One of the most intricate aspects of implementing LIA-3 is the treatment of the sign of zero. As specified in IEC 60559, +0 and -0 are distinct entities. LIA-3 explicitly uses this distinction to define continuity across branch cuts. For instance, the sign of the imaginary part of the argument approaching the negative real axis determines the result of the complex logarithm. An implementation must correctly propagate and discriminate signed zeros to achieve the exact limits required by the standard.
The standard itself is language-independent, but its widespread adoption relies on bindings. The ISO/IEC 10967 series heavily influenced the complex.h header in C (C99 and later) and intrinsic functions in Fortran 2003/2008. The standard acts as a litmus test for the correctness of these language implementations.
Complex arithmetic introduces unique challenges with infinities and NaN. For example, multiplying a finite complex number by an infinite complex number can produce a finite result under naive component-wise multiplication. LIA-3 mandates specific rules for these cases, often requiring the expression of complex numbers in an infinite component model called a projective plane or employing specific Cartesian formulas that preserve the intuitive algebraic properties of infinities (e.g., ∞ + i·∞).
Claiming conformance to ISO/IEC 10967-3:2006 is a significant claim for a software platform or hardware architecture. Conformance requires the satisfaction of all clauses pertaining to the specific data types and functions provided.
complex.h header, as well as the intrinsic complex functions in Fortran 2003/2008 and Ada. Modern compilers like GCC and Clang explicitly aim to provide LIA-3 conformance for their complex math libraries. — Article developed for technical documentation purposes. Standard reference: ISO/IEC 10967-3:2006. Year of publication reference: 2026.