wrt_E(p
,w
,d
,e
,len
) ufloat
*p
; ftnlen len
;
wrt_E(ufloat
*p
, int w
, int d
, int e
, ftnlen len
)
char buf
[FMAX
+EXPMAXDIGS
+4], *s
, *se
;
int d1
, delta
, e1
, i
, sign
, signspace
;
if(f__scale
>= d
+ 2 || f__scale
<= -d
)
signspace
= (int)f__cplus
;
delta
= w
- (2 /* for the . and the d adjustment above */
+ 2 /* for the E+ */ + signspace
+ d
+ e
);
sprintf(buf
,"%#.*E", d
, dd
);
/* check for NaN, Infinity */
signspace
= 0; /* no sign for NaNs */
delta
= w
- strlen(buf
) - signspace
;
sprintf(se
, "%+.2d", atoi(se
) + 1 - f__scale
);
/* accommodate 3 significant digits in exponent */
for(s
-= 2, e1
= 2; s
[0] = s
[1]; s
++);
/* Pedantic gives the behavior that Fortran 77 specifies, */
/* i.e., requires that E be specified for exponent fields */
/* of more than 3 digits. With Pedantic undefined, we get */
/* the behavior that Cray displays -- you get a bigger */
/* exponent field if it fits. */
for(s
-= 2, e1
= 2; s
[0] = s
[1]; s
++)
for(s
+= 2, e1
= 2; *s
; ++e1
, ++s
)
do PUT('0'); while(--d1
> 0);
wrt_F(p
,w
,d
,len
) ufloat
*p
; ftnlen len
;
wrt_F(ufloat
*p
, int w
, int d
, ftnlen len
)
char *b
, buf
[MAXINTDIGS
+MAXFRACDIGS
+4], *s
;
x
= (len
==sizeof(real
)?p
->pf
:p
->pd
);
do x
*= 10.; while(--n
> 0);
do x
*= 0.1; while(++n
< 0);
sprintf(b
= buf
, "%#.*f", d
, x
);
n
= sprintf(b
= buf
, "%#.*f", d
, x
) + d1
;
/* check for all zeros */