00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "ieee_consts.h"
00012
00013
00014
00015
00016 static int is_bigendian(void)
00017 {
00018 union
00019 {
00020 long l;
00021 char c[sizeof (long)];
00022 } u;
00023 u.l = 1L;
00024 return(u.c[sizeof (long) - 1] == 1);
00025 }
00026
00027
00028
00029 float mxt_getnanf(void)
00030 {
00031 static int ieee_fnan_inited = 0;
00032
00033 static union {
00034 float f;
00035 unsigned char c[4];
00036 } nan;
00037
00038 if (!ieee_fnan_inited) {
00039 int i;
00040 for (i = 0; i < 4; i++)
00041 nan.c[i] = 1;
00042 if (is_bigendian()) {
00043 nan.c[0] = 0x7F;
00044 nan.c[1] = 0x80;
00045 } else {
00046 nan.c[3] = 0x7F;
00047 nan.c[2] = 0x80;
00048 }
00049 ieee_fnan_inited = 1;
00050 }
00051 return(nan.f);
00052 }
00053
00054 double mxt_getnand(void)
00055 {
00056 static int ieee_nan_inited = 0;
00057
00058 static union {
00059 double d;
00060 unsigned char c[8];
00061 } nan;
00062
00063 if (!ieee_nan_inited) {
00064 int i;
00065 for (i = 0; i < 8; i++)
00066 nan.c[i] = 1;
00067 if (is_bigendian()) {
00068 nan.c[0] = 0x7F;
00069 nan.c[1] = 0xF0;
00070 } else {
00071 nan.c[7] = 0x7F;
00072 nan.c[6] = 0xF0;
00073 }
00074 ieee_nan_inited = 1;
00075 }
00076 return(nan.d);
00077 }
00078
00079
00080 double mxt_getinfd(void)
00081 {
00082 static int ieee_inf_inited = 0;
00083
00084 static union {
00085 double d;
00086 unsigned char c[8];
00087 } inf;
00088
00089 if (!ieee_inf_inited) {
00090 int i;
00091 for (i = 0; i < 8; i++)
00092 inf.c[i] = 0;
00093 if (is_bigendian()) {
00094 inf.c[0] = 0x7F;
00095 inf.c[1] = 0xF0;
00096 } else {
00097 inf.c[7] = 0x7F;
00098 inf.c[6] = 0xF0;
00099 }
00100 ieee_inf_inited = 1;
00101 }
00102 return(inf.d);
00103 }