diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/SNIP/msb2ieee.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/SNIP/msb2ieee.c')
-rwxr-xr-x | reference/C/CONTRIB/SNIP/msb2ieee.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/msb2ieee.c b/reference/C/CONTRIB/SNIP/msb2ieee.c new file mode 100755 index 0000000..74265c0 --- /dev/null +++ b/reference/C/CONTRIB/SNIP/msb2ieee.c @@ -0,0 +1,59 @@ +/*** MSBIN conversion routines ***/
+/*** public domain by Jeffery Foy ***/
+
+union Converter {
+ unsigned char uc[10];
+ unsigned int ui[5];
+ unsigned long ul[2];
+ float f[2];
+ double d[1];
+};
+
+/* MSBINToIEEE - Converts an MSBIN floating point number */
+/* to IEEE floating point format */
+/* */
+/* Input: f - floating point number in MSBIN format */
+/* Output: Same number in IEEE format */
+
+float MSBINToIEEE(float f)
+{
+ union Converter t;
+ int sign, exp; /* sign and exponent */
+
+ t.f[0] = f;
+
+ /* extract the sign & move exponent bias from 0x81 to 0x7f */
+
+ sign = t.uc[2] / 0x80;
+ exp = (t.uc[3] - 0x81 + 0x7f) & 0xff;
+
+ /* reassemble them in IEEE 4 byte real number format */
+
+ t.ui[1] = (t.ui[1] & 0x7f) | (exp << 7) | (sign << 15);
+ return t.f[0];
+} /* End of MSBINToIEEE */
+
+
+/* IEEEToMSBIN - Converts an IEEE floating point number */
+/* to MSBIN floating point format */
+/* */
+/* Input: f - floating point number in IEEE format */
+/* Output: Same number in MSBIN format */
+
+float IEEEToMSBIN(float f)
+{
+ union Converter t;
+ int sign, exp; /* sign and exponent */
+
+ t.f[0] = f;
+
+ /* extract sign & change exponent bias from 0x7f to 0x81 */
+
+ sign = t.uc[3] / 0x80;
+ exp = ((t.ui[1] >> 7) - 0x7f + 0x81) & 0xff;
+
+ /* reassemble them in MSBIN format */
+
+ t.ui[1] = (t.ui[1] & 0x7f) | (sign << 7) | (exp << 8);
+ return t.f[0];
+} /* End of IEEEToMSBIN */
|