xdr_double problem
Trevor Paquette
paquette at cpsc.ucalgary.ca
Tue Feb 28 04:40:14 AEST 1989
As some of you I have been having problems with the xdr routines
on the 3000 series Iris. Well I have come across what I think is a
possible bug. (BTW, thaks to all of you who have helped me so far).
Below is two programs that I am using to test the xdr_double
routines. Program 1 is run on the Iris to generate the file,
program 2 is used on a sun to read in the file.
/*** Program 1 ***/
#include <rpc/rpc.h>
#include <stdio.h>
main()
{
double d;
int i;
XDR xdrs;
FILE *out;
out = fopen("test","w");
xdrstdio_create(&xdrs, out, XDR_ENCODE);
for(i = 0; i < 10; i++)
{
d = (double)i;
xdr_double(&xdrs, &d);
}
fclose(out);
}
/*** Program 2 ***/
#include <rpc/rpc.h>
#include <stdio.h>
main()
{
double j;
XDR xdrs;
FILE *in;
in = fopen("test","r");
xdrstdio_create(&xdrs, in, XDR_DECODE);
while(xdr_double(&xdrs, &j))
fprintf(stdout,"%lf ",j);
fprintf(stdout,"\n");
fclose(in);
}
This is the file test that is output by program 1 when run on the
iris. (compiled with cc prog1.c -lsun -lbsd)
Off-
Set ------------- Hex Dump Values ----------------- ---- Ascii -----
0 00 00 00 00 00 00 00 00 3e 00 08 7c 00 00 00 00 ........>..|....
10 40 00 06 fc 00 00 00 00 40 00 07 3c 00 00 00 00 @....... at ..<....
20 40 00 07 7c 00 00 00 00 40 00 07 9c 00 00 00 00 @..|.... at .......
30 40 00 07 bc 00 00 00 00 40 00 07 dc 00 00 00 00 @....... at .......
40 40 00 07 fc 00 00 00 00 40 00 08 0c 00 00 00 00 @....... at .......
This is the output that program 2 generates..
0.000000 0.000000 2.003410 2.003532 2.003654 2.003716 2.003777 2.003838
2.003899 2.003929
Do even close to what I'd expect..
This is the file test that is generated by the sun when program 1 is
run on it.
Off-
Set ------------- Hex Dump Values ----------------- ---- Ascii -----
0 00 00 00 00 00 00 00 00 3f f0 00 00 00 00 00 00 ........?.......
10 40 00 00 00 00 00 00 00 40 08 00 00 00 00 00 00 @....... at .......
20 40 10 00 00 00 00 00 00 40 14 00 00 00 00 00 00 @....... at .......
30 40 18 00 00 00 00 00 00 40 1c 00 00 00 00 00 00 @....... at .......
40 40 20 00 00 00 00 00 00 40 22 00 00 00 00 00 00 @ ......@"......
This is the output that program 2 generates when run on the Iris.
0.000000 0.000040 163840.000001 163968.000001 164096.000001 164160.000001
164224.000001 164288.000001 164352.000001 164384.000001
Again this is not even close to what is suppose to be generated.
When program 1 and program 2 are run both on the sun the output is as
expected..
0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000
8.000000 9.000000
When program 1 and program 2 are both run on the Iris again the output
is all wrong.. (which seems to be really bad..)
0.000000 0.007813 2.000000 32.000000 512.000000 2048.000000 8192.000000
32768.000000 131072.000001 262144.000002
Could the problem be that sizeof(float) and sizeof(double) are
the same on the Iris 3000 series??? If so then why weren't the
xdr routines in libsun.a changed to reflect this?
Is there a fix for this? Or am I missing something totally obvious?
Trev
==============================================================================
Trevor Paquette/GraphicsLand, Calgary, Alberta
..uunet!{ubc-cs,utai,alberta}!calgary!paquette ICBM:51 03 N/114 05 W
calgary!paquette at cs.ubc.ca Luminous beings we are, not this crude matter
More information about the Comp.sys.sgi
mailing list