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;
 | |
| }
 | |
| 
 | |
| 
 |