Tomas Hubalek wrote:
Mrknete se do Blocha (cesky jako Java efektivne: 57 zasad softwaroveho experta) na radu cislo 31. U double a float mate vzdycky velky problem, pokud provedete nejaky vypocet nekolikrat za sebou (treba v nejakem cyklu, apod.). To se pak budete divit, co vam vyjde.
Viz slavny priklad, co se stane, kdyz vickrat za sebou vynasobim
1/k cislem (k+1) a odectu 1. Teoreticky bych mel zase dostat 1/k.
Prakticky treba pro k=5 a ctyricet opakovani dostanete
misto 1/5=0.2 zcela jine cislo, a to 1099325942116.
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[40];
for(double k = 1;k<=17;k++) {
a[1] = ((double)1)/((double)k);
for(int j = 2; j<a.length; j++) {
a[j] = a[j-1]*(k+1)-1;
}
System.out.println("k="+k+" a[1]="+a[1]+"
a["+(a.length-1)+"]="+a[a.length-1]);
}
}
}
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
--------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature
