Richard Malaschitz wrote:
                 a[j] = a[j-1]*(k+1)-1;


Pretoze uz v druhom cykle neplati ze a[j-1] == k tak je normalne ze prichadza k takym vysledkom. Ked si zoberieme jednoduchsi program, tak dostaneme velmi optimisticke vysledky:

double k = 5; for (int i=0;i<1000000;i++) { k = (1/k) * (k+1) - 1; }
        System.out.println(k);

k = 4.999999999999996

Takze je ta Java predsa celkom pouzitelna :)

Jenomze ten vas program nedela to stejne co ten muj.
Muj program v kazdem kroku spocita 1/k s kumulujici se chybou,
kdezto vas program v prvnim kroku do k priradi 1/k,
takze v druhem kroku prvni clen neni (1/k), ale 1/1/k, cili k,
a druhy clen neni (k+1) ale (1/k+1).
Takze vas program alternuje mezi hodnotami zhruba 0.2 a 5
a chybu neakumuluje.

Muzete si to porovnat:

public class Nepresnost {
public static void main(String[] args) {
    System.out.println(" Ukazka ze neplati  (1/k)*(k+1)-1 = 1/k");
    double[] a = new double[41];
    for(double k = 5;k<=5;k++) {
        double d = k;
        a[1] = ((double)1)/((double)k);
        for(int j = 2; j<a.length; j++) {
            //makub
            a[j] = a[j-1]*(k+1)-1;
            //Malaschitz
            d = (1/d)*(d+1)-1;
            System.out.println("k="+k+" a["+j+"]="+a[j]+" d="+d);
        }
System.out.println("k="+k+" a[1]="+a[1]+" a["+(a.length-1)+"]="+a[a.length-1]);
    }
}
}

A pro poradek musim zopakovat - tohle neni vec Javy, ale reprezentace
realnych cisle v pocitacich pomoci diskretnich (nespojitych) hodnot.
V kteremkoliv jinem jazyce bude ten algoritmus hromadit
chybu stejnym zpusobem.

Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [EMAIL PROTECTED]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem