206 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
#include "common.h"
 | 
						|
#ifdef FUNCTION_PROFILE
 | 
						|
#include "functable.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#define  GAM     4096.e0
 | 
						|
#define  GAMSQ   16777216.e0
 | 
						|
#define  RGAMSQ  5.9604645e-8
 | 
						|
 | 
						|
#ifdef DOUBLE
 | 
						|
#define ABS(x) fabs(x)
 | 
						|
#else
 | 
						|
#define ABS(x) fabsf(x)
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef CBLAS
 | 
						|
 | 
						|
void NAME(FLOAT *dd1, FLOAT *dd2, FLOAT *dx1, FLOAT *DY1, FLOAT *dparam){
 | 
						|
 | 
						|
  FLOAT	dy1 = *DY1;
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
void CNAME(FLOAT *dd1, FLOAT *dd2, FLOAT *dx1, FLOAT dy1, FLOAT *dparam){
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
    FLOAT du, dp1, dp2, dq2, dq1, dh11, dh21, dh12, dh22;
 | 
						|
    int igo, flag;
 | 
						|
    FLOAT dtemp;
 | 
						|
 | 
						|
#ifndef CBLAS
 | 
						|
  PRINT_DEBUG_NAME;
 | 
						|
#else
 | 
						|
  PRINT_DEBUG_CNAME;
 | 
						|
#endif
 | 
						|
 | 
						|
    dh11 = ZERO;
 | 
						|
    dh12 = ZERO;
 | 
						|
    dh21 = ZERO;
 | 
						|
    dh22 = ZERO;
 | 
						|
 | 
						|
    if (*dd1 < ZERO) goto L60;
 | 
						|
 | 
						|
    dp2 = *dd2 * dy1;
 | 
						|
 | 
						|
    if (dp2 == ZERO) {
 | 
						|
      flag = -2;
 | 
						|
      goto L260;
 | 
						|
    }
 | 
						|
 | 
						|
    dp1 = *dd1 * *dx1;
 | 
						|
    dq2 =  dp2 * dy1;
 | 
						|
    dq1 =  dp1 * *dx1;
 | 
						|
 | 
						|
    if (! (ABS(dq1) > ABS(dq2))) goto L40;
 | 
						|
 | 
						|
    dh21 = -(dy1) / *dx1;
 | 
						|
    dh12 = dp2 / dp1;
 | 
						|
 | 
						|
    du = ONE - dh12 * dh21;
 | 
						|
 | 
						|
    if (du <= ZERO) goto L60;
 | 
						|
 | 
						|
    flag = 0;
 | 
						|
    *dd1 /= du;
 | 
						|
    *dd2 /= du;
 | 
						|
    *dx1 *= du;
 | 
						|
 | 
						|
    goto L100;
 | 
						|
 | 
						|
L40:
 | 
						|
    if (dq2 < ZERO) goto L60;
 | 
						|
 | 
						|
    flag = 1;
 | 
						|
    dh11  = dp1 / dp2;
 | 
						|
    dh22  = *dx1 / dy1;
 | 
						|
    du    = ONE + dh11 * dh22;
 | 
						|
    dtemp = *dd2 / du;
 | 
						|
    *dd2  = *dd1 / du;
 | 
						|
    *dd1  = dtemp;
 | 
						|
    *dx1  = dy1 * du;
 | 
						|
    goto L100;
 | 
						|
 | 
						|
L60:
 | 
						|
    flag = -1;
 | 
						|
    dh11 = ZERO;
 | 
						|
    dh12 = ZERO;
 | 
						|
    dh21 = ZERO;
 | 
						|
    dh22 = ZERO;
 | 
						|
 | 
						|
    *dd1 = ZERO;
 | 
						|
    *dd2 = ZERO;
 | 
						|
    *dx1 = ZERO;
 | 
						|
    goto L220;
 | 
						|
 | 
						|
 | 
						|
L70:
 | 
						|
    if (flag < 0) goto L90;
 | 
						|
 
 | 
						|
    if (flag > 0) goto L80;
 | 
						|
 
 | 
						|
    dh11 = ONE;
 | 
						|
    dh22 = ONE;
 | 
						|
    flag = -1;
 | 
						|
    goto L90;
 | 
						|
 | 
						|
L80:
 | 
						|
    dh21 = -ONE;
 | 
						|
    dh12 = ONE;
 | 
						|
    flag = -1;
 | 
						|
 | 
						|
L90:
 | 
						|
    switch (igo) {
 | 
						|
	case 0: goto L120;
 | 
						|
	case 1: goto L150;
 | 
						|
	case 2: goto L180;
 | 
						|
	case 3: goto L210;
 | 
						|
    }
 | 
						|
 | 
						|
L100:
 | 
						|
    if (!(*dd1 <= RGAMSQ)) goto L130;
 | 
						|
    if (*dd1 == ZERO) goto L160;
 | 
						|
    igo = 0;
 | 
						|
    goto L70;
 | 
						|
 | 
						|
L120:
 | 
						|
    *dd1 *= GAM * GAM;
 | 
						|
    *dx1 /= GAM;
 | 
						|
    dh11 /= GAM;
 | 
						|
    dh12 /= GAM;
 | 
						|
    goto L100;
 | 
						|
 | 
						|
L130:
 | 
						|
    if (! (*dd1 >= GAMSQ)) {
 | 
						|
	goto L160;
 | 
						|
    }
 | 
						|
    igo = 1;
 | 
						|
    goto L70;
 | 
						|
 | 
						|
L150:
 | 
						|
    *dd1 /= GAM * GAM;
 | 
						|
    *dx1 *= GAM;
 | 
						|
    dh11 *= GAM;
 | 
						|
    dh12 *= GAM;
 | 
						|
    goto L130;
 | 
						|
 | 
						|
L160:
 | 
						|
    if (! (ABS(*dd2) <= RGAMSQ)) {
 | 
						|
	goto L190;
 | 
						|
    }
 | 
						|
    if (*dd2 == ZERO) {
 | 
						|
	goto L220;
 | 
						|
    }
 | 
						|
    igo = 2;
 | 
						|
    goto L70;
 | 
						|
 | 
						|
L180:
 | 
						|
/* Computing 2nd power */
 | 
						|
    *dd2 *= GAM * GAM;
 | 
						|
    dh21 /= GAM;
 | 
						|
    dh22 /= GAM;
 | 
						|
    goto L160;
 | 
						|
 | 
						|
L190:
 | 
						|
    if (! (ABS(*dd2) >= GAMSQ)) {
 | 
						|
	goto L220;
 | 
						|
    }
 | 
						|
    igo = 3;
 | 
						|
    goto L70;
 | 
						|
 | 
						|
L210:
 | 
						|
/* Computing 2nd power */
 | 
						|
    *dd2 /= GAM * GAM;
 | 
						|
    dh21 *= GAM;
 | 
						|
    dh22 *= GAM;
 | 
						|
    goto L190;
 | 
						|
 | 
						|
L220:
 | 
						|
    if (flag < 0) {
 | 
						|
	goto L250;
 | 
						|
    } else if (flag == 0) {
 | 
						|
	goto L230;
 | 
						|
    } else {
 | 
						|
	goto L240;
 | 
						|
    }
 | 
						|
L230:
 | 
						|
    dparam[2] = dh21;
 | 
						|
    dparam[3] = dh12;
 | 
						|
    goto L260;
 | 
						|
L240:
 | 
						|
    dparam[2] = dh11;
 | 
						|
    dparam[4] = dh22;
 | 
						|
    goto L260;
 | 
						|
L250:
 | 
						|
    dparam[1] = dh11;
 | 
						|
    dparam[2] = dh21;
 | 
						|
    dparam[3] = dh12;
 | 
						|
    dparam[4] = dh22;
 | 
						|
L260:
 | 
						|
    dparam[0] = (FLOAT) flag;
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
 |