DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e0334d018⟧ TextFile

    Length: 835 (0x343)
    Types: TextFile
    Notes: UNIX file
    Names: »tan.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »libm/tan.c« 

TextFile

/*
 * Evaluate the tangent function.
 * (Hart 4245, 17.08)
 */
#include <math.h>

static double tanntab[] ={
	-0.16045331195592187943926861e+05,
	 0.12697548376580828837860720e+04,
	-0.17135185514886110932101000e+02,
	 0.28208772971655103151400000e-01
};
static double tanmtab[] ={
	-0.20429550186600697853114142e+05,
	 0.58173599554655686739034190e+04,
	-0.18149310354089045993457500e+03,
	 0.10000000000000000000000000e+01
};

double
tan(x)
double x;
{
	double r;
	register int i, s;

	x = modf(x/(2.0*PI), &r);
	i = 0;
	s = 0;
	if (x > 0.5)
		x -= 0.5;
	if (x > 0.25) {
		s = 1;
		x = 0.5 - x;
	}
	if (x > 0.125) {
		i = 1;
		x = 0.25 - x;
	}
	x *= 8.0;
	r = x * x;
	r = x * (_pol(r, tanntab, 4)/_pol(r, tanmtab, 4));
	if (i) {
		if (r < 1.0/I) {
			errno = ERANGE;
			return (I);
		}
		r = 1/r;
	}
	if (s)
		r = -r;
	return (r);
}