home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_08_09
/
8n09047b
< prev
next >
Wrap
Text File
|
1990-05-16
|
2KB
|
76 lines
Listing 3:
/* complex hyperbolic sine routine intended to test
argument passing and function returns only. This
version passes doubles to a function which obtains
memory using malloc() and returns pointers to that
memory. */
#include <dos.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define BIOS_DATA_SEG 0x40
#define TIMER_DATA 0x6c
#define TICKS_PER_DAY 0x01800B0L
long getticks(void);
char *csinh(double, double);
main()
{
double x, y, realarg, imagarg;
char *vlurtnd;
int ctr;
long start, end;
start = getticks();
printf("\n BEGIN AT CLOCK = %ld", start);
realarg = 3.0;
imagarg = -2.0;
for(ctr = 1; ctr <= 5000; ++ctr)
{
vlurtnd = csinh(realarg, imagarg);
x = *(double*)(vlurtnd);
y = *((double*)(vlurtnd + 8));
free((void*)vlurtnd);
}
end = getticks();
printf("\n\n REAL RESULT = %lG", x);
printf(" IMAG RESULT = %lG", y);
printf("\n END AT CLOCK = %ld", end);
printf("\n\n ELAPSED TICKS = %ld", end - start);
}
char *csinh(double realarg, double imagarg)
{
double outreal, outimag, *pntrreal, *pntrimag;
char *rtnvlu;
rtnvlu = (char *)malloc(16);
outreal = cos(imagarg) * sinh(realarg);
outimag = sin(imagarg) * cosh(realarg);
pntrreal = (double*)rtnvlu;
pntrimag = (double*)(rtnvlu + 8);
*pntrreal = outreal;
*pntrimag = outimag;
return rtnvlu;
}