Mercurial > repos > dawe > srf2fastq
diff srf2fastq/io_lib-1.12.2/io_lib/fpoint.c @ 0:d901c9f41a6a default tip
Migrated tool version 1.0.1 from old tool shed archive to new tool shed repository
author | dawe |
---|---|
date | Tue, 07 Jun 2011 17:48:05 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srf2fastq/io_lib-1.12.2/io_lib/fpoint.c Tue Jun 07 17:48:05 2011 -0400 @@ -0,0 +1,71 @@ +/* + * Copyright (c) Medical Research Council 1994. All rights reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation for any purpose is hereby granted without fee, provided that + * this copyright and notice appears in all copies. + * + * This file was written by James Bonfield, Simon Dear, Rodger Staden, + * as part of the Staden Package at the MRC Laboratory of Molecular + * Biology, Hills Road, Cambridge, CB2 2QH, United Kingdom. + * + * MRC disclaims all warranties with regard to this software. + */ + +#include <math.h> +#include "io_lib/fpoint.h" +/* +extern double log ( double x ) ; +extern double exp ( double x ) ; +*/ +#define IEEE + +float int_to_float(int in) +/* +** interpret the integer in as a +** floating point number in IEEE format +*/ +{ + /* + Assume `in' is stored as a float according to the + ANSI IEEE 754-1985 standard. See the tables below: + + s = sign ( 1 bit) + e = biased exponent (8 bits) + f = fraction (23 bits) + + floating point number = (-1)^s 2^(e-127) 1.f + + Bits Name Content + 31 Sign 1 iff number is negative + 23-30 Exponent Eight-Bit exponent, biased by 127 + 0-22 Fraction 23-bit fraction component of normalised significant. + The "one" bit is "hidden" + + If IEEE floating point format is supported on your machine... + ensure there is a #define IEEE somewhere. + */ + +#ifdef IEEE + union { + int i; + float f; + } cvt; + cvt.i = in; + return cvt.f; +#else + int fraction; + int exponent; + int sign; + + fraction = in & ( (1<<23)-1 ); + exponent = (in >> 23) & ( (1<<8)-1 ); + sign = (in >> 31); + + return + (float) ( + (sign?-1.0:1.0) * + exp ( log ( (double) 2.0) * (double) (exponent - 127 - 23) ) * + (double) ((1<<23)+fraction)) ; +#endif +}