( locsemege | 2021. 03. 06., szo – 16:58 )

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));
}