|
|
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.