Gondolod, nem volt erre szükségem? Megírtam (ap)calc scriptben. Ez nem a LibreOffice. Részlet a .calcrc file-omból:
define pair(x) {
if (x<=0) {
printf("Invalid parameter: zero or negative\n");
return;
}
local mode2save, m, len, i, j, idx, y, err, sc, mi, mj, n, full, min;
sc=ilog10(x);
if (abs(sc)>4) {
printf("Invalid parameter: too large rate\n");
return;
}
mode2save=config("mode2", "off");
m=list(10, 11, 12, 15, 16, 18, 20, 22, 24, 27, 30, 33, 39, 47, 51, 56, 68, 75, 82, 91);
full=list();
len=size(m);
for (i=0; i<len; i++) {
for (j=0; j<len; j++) {
mi=m[[i]];
mj=m[[j]];
if (sc<0) {
mi*=10^-sc;
}
if (j<i) {
if (sc<0) {
mi/=10;
} else {
mj*=10;
}
}
if (sc>0) {
mj*=10^sc;
}
y=mj/mi;
err=(y-x)/x;
n=list(mi, mj, err);
append(full, n);
}
}
for (j=0; j<4; j++) {
len=size(full);
min=10;
for (i=0; i<len; i++) {
n=full[[i]];
err=abs(n[[2]]);
if (err<min) {
min=err;
idx=i;
}
}
for (i=idx; i<size(full); i++) {
n=full[[i]];
err=n[[2]];
if (abs(err)==min) {
delete(full, i--);
mi=n[[0]];
mj=n[[1]];
printf("%d %d\terr=%7.2f %%\n", mi, mj, 100*err);
}
}
}
null(config("mode2", mode2save));
}