
CPU Computing 65
Rational ConvertFrom (binary32 x)
{
uint32
t sign , biased , trailing ;
GetEncoding(x , sign , biased , trail in g );
I nte g er numer , denom ;
if (biased == 0)
{
if (trailing == 0)
{
// x i s +0 o r −0.
numer = 0;
denom = 1 ;
}
else
{
// x i s subnormal .
numer = t r a i l i n g ;
denom = (1 << 149);
}
}
else if (biased <= 254)
{
// x is no rm al .
numer = (1 << 23) + trailing ;
denom = 1;
power = b i a s ed − 150;
if (power > 0)
{
numer << =power;
}
else if (power < 0)
{
denom <<= −power ;
}
}
else // biased == 255.
{
if (trailing == 0)
{
// x i s + i n f i n i t y o r − infinity .
R a i s e F l a g s (SIGNAL
OVERF LOW ) ;
}
else
{
// x i s a NaN.
Raise F l a gs ( SIGNAL ...