/* * unixfrac - represent a fraction as a sum of distince unit fractions * * Copyright (C) 1999 David I. Bell * * Calc is open software; you can redistribute it and/or modify it under * the terms of the version 2.1 of the GNU Lesser General Public License * as published by the Free Software Foundation. * * Calc is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * Public License for more details. * * A copy of version 2.1 of the GNU Lesser General Public License is * distributed with calc under the filename COPYING-LGPL. You should have * received a copy with calc; if not, write to Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Under source code control: 1990/02/15 01:50:38 * File existed as early as: before 1990 * * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ */ /* * 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; }