4.4BSD/usr/src/contrib/calc-1.26.4/lib/unitfrac.cal

/*
 * Copyright (c) 1993 David I. Bell
 * Permission is granted to use, distribute, or modify this source,
 * provided that this copyright notice remains intact.
 *
 * Represent a fraction as sum of distinct unit fractions.
 * The output is the unit fractions themselves, and in square brackets,
 * the number of digits in the numerator and denominator of the value left
 * to be found.  Numbers larger than 3.5 become very difficult to calculate.
 */

define unitfrac(x)
{
	local	d, di, n;

	if (x <= 0)
		quit "Non-positive argument";
	d = 2;
	do {
		n = int(1 / x) + 1;
		if (n > d)
			d = n;
		di = 1/d;
		print '  [': digits(num(x)): '/': digits(den(x)): ']',, di;
		x -= di;
		d++;
	} while ((num(x) > 1) || (x == di) || (x == 1));
	print '  [1/1]',, x;
}


global lib_debug;
if (!isnum(lib_debug) || lib_debug>0) print "unitfrac(x) defined";