This is num_co.c in view mode; [Download] [Up]
Changes file for /usr/local/src/kcl/./c/num_co.c
Created on Mon Feb 4 23:21:54 1991
Usage \n@s[Original text\n@s|Replacement Text\n@s]
See the file rascal.ics.utexas.edu:/usr2/ftp/merge.c
for a program to merge change files. Anything not between
"\n@s[" and "\n@s]" is a simply a comment.
This file was constructed using emacs and merge.el
Enhancements Copyright (c) W. Schelter All rights reserved.
by (Bill Schelter) wfs@carl.ma.utexas.edu
****Change:(orig (13 13 a))
@s[ that know the representation of floating-point numbers.
*/
@s| that know the representation of floating-point numbers.
*/
#define IN_NUM_CO
@s]
****Change:(orig (16 16 a))
@s[#include "num_include.h"
@s|#include "num_include.h"
#include "mp.h"
@s]
****Change:(orig (19 19 a))
@s[object plus_half, minus_half;
@s|object plus_half, minus_half;
#ifdef CONVEX
#define VAX
#endif
@s]
****Change:(orig (92 93 c))
@s[ h = *(int *)(&d);
l = *((int *)(&d) + 1);
@s| h = *((int *)(&d) + HIND);
l = *((int *)(&d) + LIND);
@s]
****Change:(orig (98 98 a))
@s[ l = ((l >> 16) & 0xffff) | (l << 16);
@s| l = ((l >> 16) & 0xffff) | (l << 16);
/* is this right!!!! I don't believe it --wfs */
h = h >> 1;
@s]
****Change:(orig (100 104 d))
@s[#endif
#ifdef IBMRT
#endif
@s|#endif
@s]
****Change:(orig (107 107 c))
@s[ h = (h & 0x000fffff | 0x00100000) << 1;
@s| h = (h & 0x000fffff | 0x00100000);
@s]
****Change:(orig (109 112 d))
@s[#endif
#ifdef MV
#endif
@s|#endif
@s]
****Change:(orig (115 115 c))
@s[ h = (h & 0x00ffffff) << 1;
@s| h = (h & 0x00ffffff);
@s]
****Change:(orig (117 120 c))
@s[ if (l < 0) {
h++;
l &= 0x7fffffff;
}
@s| if (32-BIG_RADIX)
/* shift for making bignum */
{ h = h << (32-BIG_RADIX) ;
h |= ((l & (-1 << (32-BIG_RADIX))) >> (32-BIG_RADIX));
l &= ~(-1 << (32-BIG_RADIX));
}
@s]
****Change:(orig (219 219 c))
@s[ return(((*(int *)(&d) & 0x7ff00000) >> 20) - 1022);
@s| return((((*((int *)(&d) + HIND)) & 0x7ff00000) >> 20) - 1022);
@s]
****Change:(orig (239 239 c))
@s[ return(0.0);
*(int *)(&d)
@s| return(0.0);
*((int *)(&d) + HIND)
@s]
****Change:(orig (250 250 c))
@s[ = *(int *)(&d) & 0x800fffff | ((e + 1022) << 20) & 0x7ff00000;
@s| = *((int *)(&d) + HIND) & 0x800fffff | ((e + 1022) << 20) & 0x7ff00000;
@s]
****Change:(orig (277 278 c))
@s[ if (e <= -31) {
h >>= (-e) - 31;
@s| if (e <= -BIG_RADIX) {
h >>= (-e) - BIG_RADIX;
@s]
****Change:(orig (285 287 c))
@s[ if (e <= -31) {
e = (-e) - 31;
if (e >= 31)
@s| if (e <= -BIG_RADIX) {
e = (-e) - BIG_RADIX;
if (e >= BIG_RADIX)
@s]
****Change:(orig (297 297 c))
@s[ if (e <= -8) {
h >>= 4*(-e) - 31;
@s| if (e <= -8) {
h >>= 4*(-e) - BIG_RADIX;
@s]
****Change:(orig (341 341 a))
@s[ vs_pop;
return(z);
}
@s| vs_pop;
return(z);
}
/* Coerce X to single-float if one arg,
otherwise coerce to same float type as second arg */
@s]
****Change:(orig (362 363 c))
@s[ if (narg > 1 && t == t_longfloat)
x = make_longfloat((double)(fix(x)));
@s| if (narg > 1 && t == t_shortfloat)
x = make_shortfloat((shortfloat)(fix(x)));
@s]
****Change:(orig (365 365 c))
@s[ x = make_shortfloat((shortfloat)(fix(x)));
@s| x = make_longfloat((double)(fix(x)));
@s]
****Change:(orig (371 372 c))
@s[ if (narg > 1 && t == t_longfloat)
x = make_longfloat(d);
@s| if (narg > 1 && t == t_shortfloat)
x = make_shortfloat((shortfloat)d);
@s]
****Change:(orig (374 374 c))
@s[ x = make_shortfloat((shortfloat)d);
@s| x = make_longfloat(d);
@s]
****Change:(orig (378 379 c))
@s[ if (narg > 1 && t == t_longfloat)
x = make_longfloat((double)(sf(x)));
@s| if (narg > 1 && t == t_shortfloat);
else
x = make_longfloat((double)(sf(x)));
@s]
****Change:(orig (521 521 c))
@s[ if (number_minusp(q1) && number_compare(q, q1)) {
@s| if (number_minusp(q) && number_compare(q, q1)) {
@s]
****Change:(orig (642 642 c))
@s[ if (number_plusp(q1) && number_compare(q, q1)) {
@s| if (number_plusp(q) && number_compare(q, q1)) {
@s]
****Change:(orig (1021 1021 c))
@s[ vs_base[0] = small_fixnum(6);
@s| vs_base[0] = small_fixnum(24);
@s]
****Change:(orig (1023 1023 c))
@s[ vs_base[0] = small_fixnum(14);
@s| vs_base[0] = small_fixnum(53);
@s]
****Change:(orig (1037 1037 c))
@s[ vs_base[0] = small_fixnum(6);
@s| vs_base[0] = small_fixnum(24);
@s]
****Change:(orig (1043 1043 c))
@s[ vs_base[0] = small_fixnum(14);
@s| vs_base[0] = small_fixnum(53);
@s]
****Change:(orig (1049 1049 c))
@s[ vs_base[0] = small_fixnum(13);
@s| vs_base[0] = small_fixnum(53);
@s]
****Change:(orig (1055 1055 c))
@s[ vs_base[0] = small_fixnum(14);
@s| vs_base[0] = small_fixnum(53);
@s]
****Change:(orig (1141 1141 a))
@s[ vs_base[0] = x->cmp.cmp_imag;
break;
}
}
@s| vs_base[0] = x->cmp.cmp_imag;
break;
}
}
static float sf1,sf2;
static sf_eql()
{return(sf1==sf2);}
static lf_eql(a,b)
double a,b;
{return(a==b);}
#define LF_EQL(a,b) lf_eql((double)(a),(double)(b))
#define SF_EQL(a,b) (sf1=a,sf2=b,sf_eql())
@s]
****Change:(orig (1157 1163 d))
@s[#ifdef IBMRT
#endif
@s,
@s|
@s]
****Change:(orig (1172 1176 c))
@s[ l[0] = 1;
smallest_float = *(float *)l;
l[0] = 0;
l[1] = 1;
@s, smallest_double = *(double *)l;
@s|
((int *) &smallest_float)[0]= 1;
((int *) &smallest_double)[HIND] = 0;
((int *) &smallest_double)[LIND] = 1;
@s]
****Change:(orig (1216 1220 c))
@s[ l[0] = 0x7f7fffff;
biggest_float = *(float *)l;
l[0] = 0x7fefffff;
l[1] = 0xffffffff;
@s, biggest_double = *(double *)l;
@s|
((int *) &biggest_float)[0]= 0x7f7fffff;
((int *) &biggest_double)[HIND] = 0x7fefffff;
((int *) &biggest_double)[LIND] = 0xffffffff;
#ifdef BAD_FPCHIP
/* &&&& I am adding junk values to get past debugging */
biggest_float = 1.0e37;
smallest_float = 1.0e-37;
biggest_double = 1.0e308;
smallest_double = 1.0e-308;
printf("\n Used fake values for float max and mins ");
@s]
****Change:(orig (1222 1222 a))
@s[#endif
#endif
@s|#endif
#endif
#endif
@s]
****Change:(orig (1251 1251 c))
@s[
#endif
#ifdef S3000
@s|
#endif
#if defined(S3000) && ~defined(DBL_MAX_10_EXP)
@s]
****Change:(orig (1277 1277 a))
@s[ biggest_double = *(double *)l;
#endif
@s| biggest_double = *(double *)l;
#endif
#ifdef DBL_MAX_10_EXP
biggest_double = DBL_MAX;
smallest_double = DBL_MIN;
smallest_float = FLT_MIN;
biggest_float = FLT_MAX;
#endif
/* We want the smallest number not satisfying something,
and so we go quickly down, and then back up. We have
to use a function call for test, since in line code may keep
too much precision, while the usual lisp eql,is not
in line.
We use SMALL as a multiple to come back up by.
*/
#define SMALL 1.05
@s]
****Change:(orig (1279 1279 c))
@s[ (float)(1.0 + float_epsilon) != (float)1.0;
@s| !SF_EQL((float)(1.0 + float_epsilon),(float)1.0);
@s]
****Change:(orig (1281 1281 a))
@s[ float_epsilon /= 2.0)
;
@s| float_epsilon /= 2.0)
;
while(SF_EQL((float)(1.0 + float_epsilon),(float)1.0))
float_epsilon=float_epsilon*SMALL;
@s]
****Change:(orig (1283 1283 c))
@s[ (float)(1.0 - float_negative_epsilon) != (float)1.0;
@s| !SF_EQL((float)(1.0 - float_negative_epsilon) ,(float)1.0);
@s]
****Change:(orig (1285 1285 a))
@s[ float_negative_epsilon /= 2.0)
;
@s| float_negative_epsilon /= 2.0)
;
while(SF_EQL((float)(1.0 - float_negative_epsilon) ,(float)1.0))
float_negative_epsilon=float_negative_epsilon*SMALL;
@s]
****Change:(orig (1287 1287 c))
@s[ 1.0 + double_epsilon != 1.0;
@s| !(LF_EQL(1.0 + double_epsilon, 1.0));
@s]
****Change:(orig (1289 1289 a))
@s[ double_epsilon /= 2.0)
;
@s| double_epsilon /= 2.0)
;
while((LF_EQL(1.0 + double_epsilon, 1.0)))
double_epsilon=double_epsilon*SMALL;
;
@s]
****Change:(orig (1291 1291 c))
@s[ 1.0 - double_negative_epsilon != 1.0;
@s| !LF_EQL(1.0 - double_negative_epsilon , 1.0);
@s]
****Change:(orig (1293 1293 a))
@s[ double_negative_epsilon /= 2.0)
;
@s| double_negative_epsilon /= 2.0)
;
while(LF_EQL(1.0 - double_negative_epsilon , 1.0))
double_negative_epsilon=double_negative_epsilon*SMALL;
;
@s]
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.