Ayuda con este codigo para pasar flotante a halffloat

jor1980
09 de Julio del 2009
Hola, tengo el siguiente codigo que sirve pasar convertir un flotante 32 bit en un flotante 16 bit, el problema es que con el codigo que tengo no se manejas algunos casos especiales como el valor 0 o numeros negativos.He encontrado un documento con un codigo sencillo que parece superar este problema pero como solo se visual basic no se adaptarlo al codigo que tengo en c:

este es mi codigo:

public float Floatinttohalf(float floatValue)
{


byte[] bytes = BitConverter.GetBytes((double)floatValue);
ulong bits = BitConverter.ToUInt64(bytes, 0);

// Extract exponent from IEEE double
ulong exponent = bits & 0x7ff0000000000000L;

// Extract mantissa from IEEE double
ulong mantissa = bits & 0x000fffffffffffffL;

// Extract sign
ulong sign = bits & 0x8000000000000000L;

// Determine the offset from the bias of the exponent
int placement = (int)((exponent >> 52) - 1023);

// Check to see if offset from bias is allowable in half float
if (placement > 15 || placement < -14)
{
throw new ArgumentOutOfRangeException("Exponent portion of float value is too large to store in half-float.");
}

// Create 16 bit masks, truncating precision of mantissa
UInt16 exponentBits = (UInt16)((15 + placement) << 10);
UInt16 mantissaBits = (UInt16)(mantissa >> 42);
UInt16 signBits = (UInt16)(sign >> 48);

// Logical OR all together
UInt16 halfFloatBits = (UInt16)(exponentBits | mantissaBits | signBits);
return halfFloatBits;

}

Aquí el documento con el codigo que podria solucionar mi problema:
http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf