/* * 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";