#include "common.h"
#include <stdio.h>
#include "machine.h"
#include "bu.h"
#include "htond.c: ERROR, no HtoND conversion for this machine type"
#include "ntohd.c: ERROR, no NtoHD conversion for this machine type"
Include dependency graph for htond.c:
Go to the source code of this file.
Defines | |
#define | OUT_IEEE_ZERO |
#define | OUT_IEEE_NAN |
Functions | |
void | htond (register unsigned char *out, register const unsigned char *in, int count) |
Host to Network Doubles. | |
void | ntohd (register unsigned char *out, register const unsigned char *in, int count) |
Network to Host Doubles. |
Library routines for conversion between the local host 64-bit ("double precision") representation, and 64-bit IEEE double precision representation, in "network order", ie, big-endian, the MSB in byte [0], on the left.
As a quick review, the IEEE double precision format is as follows: sign bit, 11 bits of exponent (bias 1023), and 52 bits of mantissa, with a hidden leading one (0.1 binary). When the exponent is 0, IEEE defines a "denormalized number", which is not supported here. When the exponent is 2047 (all bits set), and: all mantissa bits are zero, value is infinity*sign, mantissa is non-zero, and: msb of mantissa=0: signaling NAN msb of mantissa=1: quiet NAN
Note that neither the input or output buffers need be word aligned, for greatest flexability in converting data, even though this imposes a speed penalty here.
These subroutines operate on a sequential block of numbers, to save on subroutine linkage execution costs, and to allow some hope for vectorization.
On brain-damaged machines like the SGI 3-D, where type "double" allocates only 4 bytes of space, these routines *still* return 8 bytes in the IEEE buffer.
Author - Michael John Muuss
Source - SECAD/VLD Computing Consortium, Bldg 394 The U. S. Army Ballistic Research Laboratory Aberdeen Proving Ground, Maryland 21005-5066
Definition in file htond.c.