15.2. Conversion Formulas

[Note]editing-note

(Bill) These Conversion Formulas will likely move to Section 2.7 Fixed-Point Data Conversions (RGB to sRGB and sRGB to RGB) and section 2.6 Numeric Representation and Computation (RGB to Shared Exponent and Shared Exponent to RGB)

15.2.1. RGB to Shared Exponent Conversion

An RGB color (red, green, blue) is transformed to a shared exponent color (redshared, greenshared, blueshared, expshared) as follows:

First, the components (red, green, blue) are clamped to (redclamped, greenclamped, blueclamped) as:

redclamped = max(0, min(sharedexpmax, red))
greenclamped = max(0, min(sharedexpmax, green))
blueclamped = max(0, min(sharedexpmax, blue))

Where:

\begin{align*} N & = 9 & \textrm{number of mantissa bits per component} \\ B & = 15 & \textrm{exponent bias} \\ E_{max} & = 31 & \textrm{maximum possible biased exponent value} \\ sharedexp_{max} & = \frac{(2^N-1)}{2^N} \times 2^{(E_{max}-B)} \end{align*}
[Note]Note

NaN, if supported, is handled as in IEEE 754-2008 minNum() and maxNum(). That is the result is a NaN is mapped to zero.

The largest clamped component, maxclamped is determined:

maxclamped = max(redclamped, greenclamped, blueclamped)

A preliminary shared exponent exp' is computed:

\begin{align*} exp' = \begin{cases} \left \lfloor \log_2(max_{clamped}) \right \rfloor + (B+1) & \textrm{for } max_{clamped} > 2^{-(B+1)} \\ 0 & \textrm{for } max_{clamped} \leq 2^{-(B+1)} \end{cases} \end{align*}

The shared exponent expshared is computed:

\begin{align*} max_{shared} = \left \lfloor \frac{max_{clamped}}{2^{(exp'-B-N)}}+\frac{1}{2} \right \rfloor \end{align*}
\begin{align*} exp_{shared} = \begin{cases} exp' & \textrm{for } 0 \leq max_{shared} < 2^N \\ exp'+1 & \textrm{for } max_{shared} = 2^N \end{cases} \end{align*}

Finally, three integer values in the range 0 to 2N are computed:

\begin{align*} red_{shared} & = \left \lfloor \frac{red_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} \right \rfloor \\ green_{shared} & = \left \lfloor \frac{green_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} \right \rfloor \\ blue_{shared} & = \left \lfloor \frac{blue_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} \right \rfloor \end{align*}

15.2.2. Shared Exponent to RGB

A shared exponent color (redshared, greenshared, blueshared, expshared) is transformed to an RGB color (red, green, blue) as follows:

red = redshared × 2(expshared - B - N)
green = greenshared × 2(expshared - B - N)
blue = blueshared × 2(expshared - B - N)

Where:

N = 9 (number of mantissa bits per component)
B = 15 (exponent bias)