📄 pelhomot.cc
字号:
/* MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7 *//* DATA SMALL(1),SMALL(2) / '20000000, '00000201 / *//* DATA LARGE(1),LARGE(2) / '37777777, '37777577 / *//* DATA RIGHT(1),RIGHT(2) / '20000000, '00000333 / *//* DATA DIVER(1),DIVER(2) / '20000000, '00000334 / *//* DATA LOG10(1),LOG10(2) / '23210115, '10237777 /, SC/987/ *//* MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. *//* DATA SMALL(1),SMALL(2) / O402400000000, O000000000000 / *//* DATA LARGE(1),LARGE(2) / O376777777777, O777777777777 / *//* DATA RIGHT(1),RIGHT(2) / O604400000000, O000000000000 / *//* DATA DIVER(1),DIVER(2) / O606400000000, O000000000000 / *//* DATA LOG10(1),LOG10(2) / O776464202324, O117571775714 /, SC/987/ *//* MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, *//* THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86. *//* DATA SMALL(1),SMALL(2) / Z00100000, Z00000000 / *//* DATA LARGE(1),LARGE(2) / Z7FFFFFFF, ZFFFFFFFF / *//* DATA RIGHT(1),RIGHT(2) / Z33100000, Z00000000 / *//* DATA DIVER(1),DIVER(2) / Z34100000, Z00000000 / *//* DATA LOG10(1),LOG10(2) / Z41134413, Z509F79FF /, SC/987/ *//* MACHINE CONSTANTS FOR THE INTERDATA 8/32 *//* WITH THE UNIX SYSTEM FORTRAN 77 COMPILER. *//* FOR THE INTERDATA FORTRAN VII COMPILER REPLACE *//* THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S. *//* DATA SMALL(1),SMALL(2) / Z'00100000', Z'00000000' / *//* DATA LARGE(1),LARGE(2) / Z'7EFFFFFF', Z'FFFFFFFF' / *//* DATA RIGHT(1),RIGHT(2) / Z'33100000', Z'00000000' / *//* DATA DIVER(1),DIVER(2) / Z'34100000', Z'00000000' / *//* DATA LOG10(1),LOG10(2) / Z'41134413', Z'509F79FF' /, SC/987/ *//* MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). *//* DATA SMALL(1),SMALL(2) / "033400000000, "000000000000 / *//* DATA LARGE(1),LARGE(2) / "377777777777, "344777777777 / *//* DATA RIGHT(1),RIGHT(2) / "113400000000, "000000000000 / *//* DATA DIVER(1),DIVER(2) / "114400000000, "000000000000 / *//* DATA LOG10(1),LOG10(2) / "177464202324, "144117571776 /, SC/987/ *//* MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). *//* DATA SMALL(1),SMALL(2) / "000400000000, "000000000000 / *//* DATA LARGE(1),LARGE(2) / "377777777777, "377777777777 / *//* DATA RIGHT(1),RIGHT(2) / "103400000000, "000000000000 / *//* DATA DIVER(1),DIVER(2) / "104400000000, "000000000000 / *//* DATA LOG10(1),LOG10(2) / "177464202324, "047674776746 /, SC/987/ *//* MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING *//* 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). *//* DATA SMALL(1),SMALL(2) / 8388608, 0 / *//* DATA LARGE(1),LARGE(2) / 2147483647, -1 / *//* DATA RIGHT(1),RIGHT(2) / 612368384, 0 / *//* DATA DIVER(1),DIVER(2) / 620756992, 0 / *//* DATA LOG10(1),LOG10(2) / 1067065498, -2063872008 /, SC/987/ *//* DATA SMALL(1),SMALL(2) / O00040000000, O00000000000 / *//* DATA LARGE(1),LARGE(2) / O17777777777, O37777777777 / *//* DATA RIGHT(1),RIGHT(2) / O04440000000, O00000000000 / *//* DATA DIVER(1),DIVER(2) / O04500000000, O00000000000 / *//* DATA LOG10(1),LOG10(2) / O07746420232, O20476747770 /, SC/987/ *//* MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING *//* 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). *//* SMALL, LARGE, RIGHT, DIVER, LOG10 SHOULD BE DECLARED *//* INTEGER SMALL(4), LARGE(4), RIGHT(4), DIVER(4), LOG10(4) *//* DATA SMALL(1),SMALL(2) / 128, 0 / *//* DATA SMALL(3),SMALL(4) / 0, 0 / *//* DATA LARGE(1),LARGE(2) / 32767, -1 / *//* DATA LARGE(3),LARGE(4) / -1, -1 / *//* DATA RIGHT(1),RIGHT(2) / 9344, 0 / *//* DATA RIGHT(3),RIGHT(4) / 0, 0 / *//* DATA DIVER(1),DIVER(2) / 9472, 0 / *//* DATA DIVER(3),DIVER(4) / 0, 0 / *//* DATA LOG10(1),LOG10(2) / 16282, 8346 / *//* DATA LOG10(3),LOG10(4) / -31493, -12296 /, SC/987/ *//* DATA SMALL(1),SMALL(2) / O000200, O000000 / *//* DATA SMALL(3),SMALL(4) / O000000, O000000 / *//* DATA LARGE(1),LARGE(2) / O077777, O177777 / *//* DATA LARGE(3),LARGE(4) / O177777, O177777 / *//* DATA RIGHT(1),RIGHT(2) / O022200, O000000 / *//* DATA RIGHT(3),RIGHT(4) / O000000, O000000 / *//* DATA DIVER(1),DIVER(2) / O022400, O000000 / *//* DATA DIVER(3),DIVER(4) / O000000, O000000 / *//* DATA LOG10(1),LOG10(2) / O037632, O020232 / *//* DATA LOG10(3),LOG10(4) / O102373, O147770 /, SC/987/ *//* MACHINE CONSTANTS FOR THE PRIME 50 SERIES SYSTEMS *//* WITH 32-BIT INTEGERS AND 64V MODE INSTRUCTIONS, *//* SUPPLIED BY IGOR BRAY. *//* DATA SMALL(1),SMALL(2) / :10000000000, :00000100001 / *//* DATA LARGE(1),LARGE(2) / :17777777777, :37777677775 / *//* DATA RIGHT(1),RIGHT(2) / :10000000000, :00000000122 / *//* DATA DIVER(1),DIVER(2) / :10000000000, :00000000123 / *//* DATA LOG10(1),LOG10(2) / :11504046501, :07674600177 /, SC/987/ *//* MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000 *//* DATA SMALL(1),SMALL(2) / $00000000, $00100000 / *//* DATA LARGE(1),LARGE(2) / $FFFFFFFF, $7FEFFFFF / *//* DATA RIGHT(1),RIGHT(2) / $00000000, $3CA00000 / *//* DATA DIVER(1),DIVER(2) / $00000000, $3CB00000 / *//* DATA LOG10(1),LOG10(2) / $509F79FF, $3FD34413 /, SC/987/ *//* MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. *//* DATA SMALL(1),SMALL(2) / O000040000000, O000000000000 / *//* DATA LARGE(1),LARGE(2) / O377777777777, O777777777777 / *//* DATA RIGHT(1),RIGHT(2) / O170540000000, O000000000000 / *//* DATA DIVER(1),DIVER(2) / O170640000000, O000000000000 / *//* DATA LOG10(1),LOG10(2) / O177746420232, O411757177572 /, SC/987/ *//* MACHINE CONSTANTS FOR THE VAX UNIX F77 COMPILER *//* DATA SMALL(1),SMALL(2) / 128, 0 / *//* DATA LARGE(1),LARGE(2) / -32769, -1 / *//* DATA RIGHT(1),RIGHT(2) / 9344, 0 / *//* DATA DIVER(1),DIVER(2) / 9472, 0 / *//* DATA LOG10(1),LOG10(2) / 546979738, -805796613 /, SC/987/ *//* MACHINE CONSTANTS FOR THE VAX-11 WITH *//* FORTRAN IV-PLUS COMPILER *//* DATA SMALL(1),SMALL(2) / Z00000080, Z00000000 / *//* DATA LARGE(1),LARGE(2) / ZFFFF7FFF, ZFFFFFFFF / *//* DATA RIGHT(1),RIGHT(2) / Z00002480, Z00000000 / *//* DATA DIVER(1),DIVER(2) / Z00002500, Z00000000 / *//* DATA LOG10(1),LOG10(2) / Z209A3F9A, ZCFF884FB /, SC/987/ *//* MACHINE CONSTANTS FOR VAX/VMS VERSION 2.2 *//* DATA SMALL(1),SMALL(2) / '80'X, '0'X / *//* DATA LARGE(1),LARGE(2) / 'FFFF7FFF'X, 'FFFFFFFF'X / *//* DATA RIGHT(1),RIGHT(2) / '2480'X, '0'X / *//* DATA DIVER(1),DIVER(2) / '2500'X, '0'X / *//* DATA LOG10(1),LOG10(2) / '209A3F9A'X, 'CFF884FB'X /, SC/987/ *//* *** ISSUE STOP 779 IF ALL DATA STATEMENTS ARE COMMENTED... */ if (sc != 987) {/* s_stop("779", 3L); */exit(0); }/* *** ISSUE STOP 778 IF ALL DATA STATEMENTS ARE OBVIOUSLY WRONG... */ if (dmach[3] >= 1.) {/* s_stop("778", 3L); */ exit(0); } if (*i < 1 || *i > 5) { goto L999; } ret_val = dmach[*i - 1]; return ret_val;L999:/* s_wsfe(&io___8); do_fio(&c__1, (char *)&(*i), (ftnlen)sizeof(integer)); e_wsfe(); s_stop("", 0L); */ return ret_val;} /* d1mach_ */#undef right#undef diver#undef small#undef large#undef dmach#undef log10/* end d1mach.c *//**********************************************************************//***************** implementation code from daxpy.c *******************//**********************************************************************//* Subroutine */ int daxpy_(integer *n, doublereal *da, doublereal *dx, integer *incx, doublereal *dy, integer *incy){ /* System generated locals */ integer i__1; /* Local variables */ static integer i, m, ix, iy, mp1;/* constant times a vector plus a vector. *//* uses unrolled loops for increments equal to one. *//* jack dongarra, linpack, 3/11/78. */ /* Parameter adjustments */ --dy; --dx; /* Function Body */ if (*n <= 0) { return 0; } if (*da == 0.) { return 0; } if (*incx == 1 && *incy == 1) { goto L20; }/* code for unequal increments or equal increments *//* not equal to 1 */ ix = 1; iy = 1; if (*incx < 0) { ix = (-(*n) + 1) * *incx + 1; } if (*incy < 0) { iy = (-(*n) + 1) * *incy + 1; } i__1 = *n; for (i = 1; i <= i__1; ++i) { dy[iy] += *da * dx[ix]; ix += *incx; iy += *incy;/* L10: */ } return 0;/* code for both increments equal to 1 *//* clean-up loop */L20: m = *n % 4; if (m == 0) { goto L40; } i__1 = m; for (i = 1; i <= i__1; ++i) { dy[i] += *da * dx[i];/* L30: */ } if (*n < 4) { return 0; }L40: mp1 = m + 1; i__1 = *n; for (i = mp1; i <= i__1; i += 4) { dy[i] += *da * dx[i]; dy[i + 1] += *da * dx[i + 1]; dy[i + 2] += *da * dx[i + 2]; dy[i + 3] += *da * dx[i + 3];/* L50: */ } return 0;} /* daxpy_ *//* end daxpy.c *//**********************************************************************//***************** implementation code from dcopy.c *******************//**********************************************************************//* Subroutine */ int dcopy_(integer *n, doublereal *dx, integer *incx, doublereal *dy, integer *incy){ /* System generated locals */ integer i__1; /* Local variables */ static integer i, m, ix, iy, mp1;/* copies a vector, x, to a vector, y. *//* uses unrolled loops for increments equal to one. *//* jack dongarra, linpack, 3/11/78. */ /* Parameter adjustments */ --dy; --dx; /* Function Body */ if (*n <= 0) { return 0; } if (*incx == 1 && *incy == 1) { goto L20; }/* code for unequal increments or equal increments *//* not equal to 1 */ ix = 1; iy = 1; if (*incx < 0) { ix = (-(*n) + 1) * *incx + 1; } if (*incy < 0) { iy = (-(*n) + 1) * *incy + 1; } i__1 = *n; for (i = 1; i <= i__1; ++i) { dy[iy] = dx[ix]; ix += *incx; iy += *incy;/* L10: */ } return 0;/* code for both increments equal to 1 *//* clean-up loop */L20: m = *n % 7; if (m == 0) { goto L40; } i__1 = m; for (i = 1; i <= i__1; ++i) { dy[i] = dx[i];/* L30: */ } if (*n < 7) { return 0; }L40: mp1 = m + 1; i__1 = *n; for (i = mp1; i <= i__1; i += 7) { dy[i] = dx[i]; dy[i + 1] = dx[i + 1]; dy[i + 2] = dx[i + 2]; dy[i + 3] = dx[i + 3]; dy[i + 4] = dx[i + 4]; dy[i + 5] = dx[i + 5]; dy[i + 6] = dx[i + 6];/* L50: */ } return 0;} /* dcopy_ *//* end dcopy.c *//**********************************************************************//***************** implementation code from dcpose.c ******************//**********************************************************************//* Table of constant values *//* static integer c__1 = 1; NOW REDUNDANT *//* Subroutine */ int dcpose_(integer *ndim, integer *n, doublereal *qr, doublereal *alpha, integer *pivot, integer *ierr, doublereal *y, doublereal *sum){ /* System generated locals */ integer qr_dim1, qr_offset, i__1, i__2, i__3; doublereal d__1; /* Builtin functions */ /* double sqrt(double); CANT DECLARE BUILTINS UNDER C++ */ /* Local variables */ static doublereal beta; static integer jbar; extern doublereal ddot_(integer *n, doublereal *dx, integer *incx, doublereal *dy, integer *incy); static doublereal qrkk; static integer i, j, k; static doublereal sigma, alphak; static integer kp1, np1;/* SUBROUTINE DCPOSE IS A MODIFICATION OF THE ALGOL PROCEDURE *//* DECOMPOSE IN P. BUSINGER AND G. H. GOLUB, LINEAR LEAST *//* SQUARES SOLUTIONS BY HOUSEHOLDER TRANSFORMATIONS, *//* NUMER. MATH. 7 (1965) 269-276. */ /* Parameter adjustments */ qr_dim1 = *ndim; qr_offset = qr_dim1 + 1; qr -= qr_offset; --alpha; --pivot; --y; --sum; /* Function Body */ *ierr = 0; np1 = *n + 1; i__1 = np1; for (j = 1; j <= i__1; ++j) { sum[j] = ddot_(n, &qr[j * qr_dim1 + 1], &c__1, &qr[j * qr_dim1 + 1], & c__1);/* L20: */ pivot[j] = j; } i__1 = *n; for (k = 1; k <= i__1; ++k) { sigma = sum[k]; jbar = k; kp1 = k + 1; i__2 = np1; for (j = kp1; j <= i__2; ++j) { if (sigma >= sum[j]) { goto L40; } sigma = sum[j]; jbar = j;L40: ; } if (jbar == k) { goto L70; } i = pivot[k]; pivot[k] = pivot[jbar]; pivot[jbar] = i; sum[jbar] = sum[k]; sum[k] = sigma; i__2 = *n; for (i = 1; i <= i__2; ++i) { sigma = qr[i + k * qr_dim1]; qr[i + k * qr_dim1] = qr[i + jbar * qr_dim1]; qr[i + jbar * qr_dim1] = sigma;/* L50: */ }/* END OF COLUMN INTERCHANGE. */L70: i__2 = *n - k + 1; sigma = ddot_(&i__2, &qr[k + k * qr_dim1], &c__1, &qr[k + k * qr_dim1] , &c__1); if (sigma != (float)0.) { goto L60; } *ierr = 1; return 0;L60: if (k == *n) { goto L500; } qrkk = qr[k + k * qr_dim1]; alphak = -sqrt(sigma); if (qrkk < (float)0.) { alphak = -alphak; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -