comparison liboctave/lo-ieee.cc @ 4601:1ed6cfbc8ea4

[project @ 2003-11-12 18:30:29 by jwe]
author jwe
date Wed, 12 Nov 2003 18:30:29 +0000
parents 6cb22b9e3942
children 15ddd40fee90
comparison
equal deleted inserted replaced
4600:3680bb30de0b 4601:1ed6cfbc8ea4
49 #include "mach-info.h" 49 #include "mach-info.h"
50 50
51 void 51 void
52 octave_ieee_init (void) 52 octave_ieee_init (void)
53 { 53 {
54 oct_mach_info::float_format ff = oct_mach_info::native_float_format ();
55
56 if (ff == octave_mach_info::flt_fmt_vax_d
57 || ff == octave_mach_info::flt_fmt_vax_g
58 || ff == octave_mach_info::flt_fmt_cray)
59 {
60 octave_Inf = octave_NaN = octaveNA = DBL_MAX;
61 }
62 else
63 {
54 #if defined (HAVE_ISINF) || defined (HAVE_FINITE) 64 #if defined (HAVE_ISINF) || defined (HAVE_FINITE)
55 65
56 #if defined (SCO) 66 #if defined (SCO)
57 double tmp = 1.0; 67 double tmp = 1.0;
58 octave_Inf = 1.0 / (tmp - tmp); 68 octave_Inf = 1.0 / (tmp - tmp);
59 #elif defined (__alpha__) && defined (__osf__) 69 #elif defined (__alpha__) && defined (__osf__)
60 extern unsigned int DINFINITY[2]; 70 extern unsigned int DINFINITY[2];
61 octave_Inf = (*(X_CAST(double *, DINFINITY))); 71 octave_Inf = (*(X_CAST(double *, DINFINITY)));
62 #else 72 #else
63 double tmp = 1e+10; 73 double tmp = 1e+10;
64 octave_Inf = tmp; 74 octave_Inf = tmp;
65 for (;;) 75 for (;;)
66 { 76 {
67 octave_Inf *= 1e+10; 77 octave_Inf *= 1e+10;
68 if (octave_Inf == tmp) 78 if (octave_Inf == tmp)
69 break; 79 break;
70 tmp = octave_Inf; 80 tmp = octave_Inf;
71 } 81 }
72 #endif 82 #endif
73 83
74 #endif 84 #endif
75 85
76 #if defined (HAVE_ISNAN) 86 #if defined (HAVE_ISNAN)
77 87
78 #if defined (__alpha__) && defined (__osf__) 88 #if defined (__alpha__) && defined (__osf__)
79 extern unsigned int DQNAN[2]; 89 extern unsigned int DQNAN[2];
80 octave_NaN = (*(X_CAST(double *, DQNAN))); 90 octave_NaN = (*(X_CAST(double *, DQNAN)));
81 #else 91 #else
82 octave_NaN = octave_Inf / octave_Inf; 92 octave_NaN = octave_Inf / octave_Inf;
83 #endif 93 #endif
84 94
85 // This is patterned after code in R. 95 // This is patterned after code in R.
86 96
87 oct_mach_info::float_format ff = oct_mach_info::native_float_format (); 97 if (ff == oct_mach_info::flt_fmt_ieee_big_endian)
98 {
99 lo_ieee_hw = 0;
100 lo_ieee_lw = 1;
101 }
102 else
103 {
104 lo_ieee_hw = 1;
105 lo_ieee_lw = 0;
106 }
88 107
89 if (ff == oct_mach_info::flt_fmt_ieee_big_endian) 108 lo_ieee_double t;
90 { 109 t.word[lo_ieee_hw] = LO_IEEE_NA_HW;
91 lo_ieee_hw = 0; 110 t.word[lo_ieee_lw] = LO_IEEE_NA_LW;
92 lo_ieee_lw = 1;
93 }
94 else
95 {
96 lo_ieee_hw = 1;
97 lo_ieee_lw = 0;
98 }
99 111
100 lo_ieee_double t; 112 octave_NA = t.value;
101 t.word[lo_ieee_hw] = LO_IEEE_NA_HW;
102 t.word[lo_ieee_lw] = LO_IEEE_NA_LW;
103
104 octave_NA = t.value;
105 113
106 #endif 114 #endif
115 }
107 } 116 }
108 117
109 /* 118 /*
110 ;;; Local Variables: *** 119 ;;; Local Variables: ***
111 ;;; mode: C++ *** 120 ;;; mode: C++ ***