jimb@amd.UUCP (Jim Budler) (05/27/85)
In response to a posting on arpanet I wrote this program to duplicate
the test. The time to do the sum of the first 10,000 terms of the
harmonic series. The poster said that Megamax C took the longest,
I don't remember the time, Aztec took 36 seconds, MacForth took 9
seconds, and MacFortran took 4 seconds.
He also said only Aztec gave the correct answer 9.787613.
Well Consulair Mac C 2.0 took 29 seconds using floats and got the
right answer. Mac C 2.0 took 29 seconds to give the answer using
doubles, and gave the answer as 9.787606, which was the same answer
givem by an IBM 3081.
Using Mac C 2.0's extended 80 bit precision reduced the time to
25 seconds by eliminating type conversions. Answer, 9.787606 .
"I" think Mac C did quite well on this test.
Here's the program:
------------------------< cut here >------------------------------
#!/bin/sh
echo 'Start of harmonic.c, part 01 of 01:'
echo 'x - harmonicMac.c'
sed 's/^X//' > harmonicMac.c << '/'
X#include "stdio.h"
X#include "sane.h"
X#Options D=300
X// To make it fit 128K Mac
X
Xmain() /* compute some floating point times */
X{
Xchar *outfile = "harmonic output";
Xlong ticks;
Xextended seconds;
Xint fd = open(outfile, 1);
Xfprintf(fd,"Calculating the sum of 10,000 terms of the harmonic series\n");
Xfprintf(fd,"Vax 11/780 with FPU took 0.02 seconds the answer was 9.787613\n");
Xfprintf(fd,"This result from originator of problem. Assumed \"right\" answer.\n");
Xprintf("Calculating the sum of 10,000 terms of the harmonic series\n");
Xprintf("Vax 11/780 with FPU took 0.02 seconds the answer was 9.787613\n");
Xprintf("This result from originator of problem. Assumed \"right\" answer.\n");
Xregister int i;
Xregister float j = 0;
X {
X printf("\nThis is a Macintosh with Consulair Mac C 2.0,\n");
X printf("using float, 32 bit precision:\n");
X fprintf(fd,"\nThis is a Macintosh with Consulair Mac C 2.0,\n");
X fprintf(fd,"using float, 32 bit precision:\n");
X ticks = -TickCount();
X for ( i=1; i <= 10000; i++ )
X j += ( 1.0 / i );
X ticks += TickCount();
X seconds = (extended)ticks/60;
X printf("\nTime = %d.%d Seconds",
X ticks/60, (((ticks % 60) * 100)+30)/60);
X printf("\tSum = %f\n", j);
X fprintf(fd,"\nTime = %d.%d Seconds",
X ticks/60, (((ticks % 60) * 100)+30)/60);
X fprintf(fd,"\tSum = %f\n", j);
X }
Xregister double k = 0;
X {
X printf("\nUsing Doubles:\n");
X printf("IBM3081 with UST System III took 0.00? seconds,\n");
X printf("\tthe answer was 9.787606.\n");
X printf("A Valid 68000 CAD workstation 4.1c BSD took 23 seconds,\n");
X printf("\tthe answer was 9.787606.\n");
X fprintf(fd,"\nUsing Doubles:\n");
X fprintf(fd,"IBM3081 with UST System III took 0.00? seconds,\n");
X fprintf(fd,"\tthe answer was 9.787606.\n");
X fprintf(fd,"A Valid 68000 CAD workstation 4.1c BSD took 23 seconds,\n");
X fprintf(fd,"\tthe answer was 9.787606.\n");
X printf("\nThis is a Macintosh with Consulair Mac C 2.0,\n");
X printf("using double, 64 bit precision:\n");
X fprintf(fd,"\nThis is a Macintosh with Consulair Mac C 2.0,\n");
X fprintf(fd,"using double, 64 bit precision:\n");
X ticks = -TickCount();
X for ( i=1; i <= 10000; i++ )
X k += ( 1.0 / i );
X ticks += TickCount();
X seconds = (extended)ticks/60;
X printf("\nTime = %d.%d Seconds",
X ticks/60, (((ticks % 60) * 100)+30)/60);
X printf("\tSum = %lf\n", k);
X fprintf(fd,"\nTime = %d.%d Seconds",
X ticks/60, (((ticks % 60) * 100)+30)/60);
X fprintf(fd,"\tSum = %lf\n", k);
X }
X register extended e = 0;
X {
X printf("\nBill Duvall of Consulair recommends using extended,\n");
X printf("80 bit precision for computation with Mac C as that is the\n");
X printf("base mode of his implemntation of the SANE/IEEE numerics.\n");
X fprintf(fd,"\nBill Duvall of Consulair recommends using extended,\n");
X fprintf(fd,"80 bit precision for computation with Mac C as that is the\n");
X fprintf(fd,"base mode of his implemntation of the SANE/IEEE numerics.\n");
X printf("\nThis is a Macintosh with Consulair Mac C 2.0,\n");
X printf("using extended, 80 bit precision:\n");
X fprintf(fd,"\nThis is a Macintosh with Consulair Mac C 2.0,\n");
X fprintf(fd,"using extended, 80 bit precision:\n");
X ticks = -TickCount();
X for ( i=1; i <= 10000; i++ )
X e += ( 1.0 / i );
X ticks += TickCount();
X seconds = (extended)ticks/60;
X printf("\nTime = %d.%d Seconds",
X ticks/60, (((ticks % 60) * 100)+30)/60);
X printf("\tSum = %f\n", e);
X fprintf(fd,"\nTime = %d.%d Seconds",
X ticks/60, (((ticks % 60) * 100)+30)/60);
X fprintf(fd,"\tSum = %f\n", e);
X }
X close(fd);
X SetFileType(outfile, (long) 'TEXT');
X getchar();
X exit(0);
X }
/
echo 'Part 01 of harmonic.c complete.'
exit
--
Jim Budler
Advanced Micro Devices, Inc.
(408) 749-5806
UUCPnet: {ucbvax,decwrl,ihnp4,allegra,intelca}!amdcad!jimb
Compuserve: 72415,1200