|
|
1.1 root 1: ===================================================================
2: RCS file: RCS/printcmd.c,v
3: retrieving revision 1.1
4: diff -c3 -r1.1 printcmd.c
5: *** /tmp/,RCSt1011248 Tue Jan 12 14:06:06 1988
6: --- printcmd.c Mon Sep 21 21:33:39 1987
7: ***************
8: *** 174,179
9: VALUE_TYPE (val) = builtin_type_float;
10: if (TYPE_LENGTH (VALUE_TYPE (val)) == sizeof (double))
11: VALUE_TYPE (val) = builtin_type_double;
12: printf ("%g", value_as_double (val));
13: break;
14:
15:
16: --- 174,185 -----
17: VALUE_TYPE (val) = builtin_type_float;
18: if (TYPE_LENGTH (VALUE_TYPE (val)) == sizeof (double))
19: VALUE_TYPE (val) = builtin_type_double;
20: + #ifdef PRINTF_BUG
21: + if (is_nan(value_as_double (val)))
22: + printf ("Nan");
23: + else
24: + printf ("%g", value_as_double (val));
25: + #else
26: printf ("%g", value_as_double (val));
27: #endif
28: break;
29: ***************
30: *** 175,180
31: if (TYPE_LENGTH (VALUE_TYPE (val)) == sizeof (double))
32: VALUE_TYPE (val) = builtin_type_double;
33: printf ("%g", value_as_double (val));
34: break;
35:
36: case 0:
37:
38: --- 181,187 -----
39: printf ("%g", value_as_double (val));
40: #else
41: printf ("%g", value_as_double (val));
42: + #endif
43: break;
44:
45: case 0:
46: ===================================================================
47: RCS file: RCS/valprint.c,v
48: retrieving revision 1.1
49: diff -c3 -r1.1 valprint.c
50: *** /tmp/,RCSt1011248 Tue Jan 12 14:06:09 1988
51: --- valprint.c Mon Sep 21 21:35:45 1987
52: ***************
53: *** 21,26
54: #include <stdio.h>
55: #include "defs.h"
56: #include "initialize.h"
57: #include "symtab.h"
58: #include "value.h"
59:
60:
61: --- 21,27 -----
62: #include <stdio.h>
63: #include "defs.h"
64: #include "initialize.h"
65: + #include "param.h"
66: #include "symtab.h"
67: #include "value.h"
68:
69: ***************
70: *** 249,255
71: break;
72:
73: case TYPE_CODE_FLT:
74: ! fprintf (stream, "%g", unpack_double (type, valaddr));
75: break;
76:
77: case TYPE_CODE_VOID:
78:
79: --- 250,265 -----
80: break;
81:
82: case TYPE_CODE_FLT:
83: ! { double d = unpack_double (type, valaddr);
84: ! #ifdef PRINTF_BUG
85: ! if (is_nan(d))
86: ! fprintf (stream, "Nan");
87: ! else
88: ! fprintf (stream, "%g", d);
89: ! #else
90: ! fprintf (stream, "%g", d);
91: ! #endif
92: ! }
93: break;
94:
95: case TYPE_CODE_VOID:
96: ***************
97: *** 559,563
98: float_type_table[sizeof (float)] = "float";
99: float_type_table[sizeof (double)] = "double";
100: }
101:
102: END_FILE
103:
104: --- 569,599 -----
105: float_type_table[sizeof (float)] = "float";
106: float_type_table[sizeof (double)] = "double";
107: }
108: +
109: +
110: + #ifdef PRINTF_BUG
111: +
112: + struct ieee { /* IEEE floating format */
113: + unsigned int s:1;
114: + unsigned int e:11;
115: + unsigned int f1:20;
116: + unsigned int f2;
117: + };
118: +
119: + #define ZERO_F(x) ((x.f1 == 0) && (x.f2 == 0)) /* zero fraction ? */
120: + #define ZERO_E(x) (x.e == 0) /* zero exponential ? */
121: + #define MAX_E(x) (x.e == 0x7ff) /* max exponential ? */
122: + #define MINUS_S(x) (x.s == 1) /* minus ? */
123: +
124: + int
125: + is_nan(arg) /* Not a Number ? */
126: + struct ieee arg;
127: + {
128: + if (MAX_E(arg) && !ZERO_F(arg))
129: + return (1);
130: + else
131: + return (0);
132: + }
133: + #endif
134:
135: END_FILE
136:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.