mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
35 lines
831 B
Plaintext
35 lines
831 B
Plaintext
/*
|
|
* Copyright (c) 1995 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;
|
|
}
|
|
|
|
|
|
if (config("lib_debug") >= 0) {
|
|
print "unitfrac(x) defined";
|
|
}
|