Forum » Programiranje » [java] double prištevanje 0.1
[java] double prištevanje 0.1
gtu ::
faking šit. joooj znoru bom!!
imam interval [-5,5]
korak je 0.1
ko poskušam s for zanko zapisati v tabelo vrednosti { -5.0,-4.9,-4.8,...}
mi začne metak kr ene bedne vun:
-0.10000000000000103
-1.0269562977782698E-15
0.09999999999999898
0.19999999999999898
0.299999999999999
koda:
imam interval [-5,5]
korak je 0.1
ko poskušam s for zanko zapisati v tabelo vrednosti { -5.0,-4.9,-4.8,...}
mi začne metak kr ene bedne vun:
-0.10000000000000103
-1.0269562977782698E-15
0.09999999999999898
0.19999999999999898
0.299999999999999
koda:
double p=-5.0; for(int v=0;v<110;v++){ interval[v]=p; p+=0.1;
Sergio ::
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.
če usoda ustavi mu korak,
on se ji zoperstavi.
Fizikalko ::
Nikoli za take operacije ne uporabljal double, ampak BigDecimal.
Tisti link pa si le oglej ter se tako nauči osnov napak števil s plavajočo vejico.
Tisti link pa si le oglej ter se tako nauči osnov napak števil s plavajočo vejico.
Fizikalko ::
Double nenatančno zapiše sdoločen aštevila in se ti to potem vleče naprej. Bodisi uporabljaj BigDecimal ali pa zaokroži , preden delaš operacije ali primerjave.
netanyahu ::
Dobro preberi Wikipedijo in nato še Goldberg, What every computer scientist should know about floating-point arithmetic. Desetiškega števila 1/10 se ne da eksaktno zapisati v binarnem sistemu -- ima neskončno decimalk.
gtu ::
aha
sam še vseeno bi prosil, če se komu da spisat tole čist na kratko?
ker se mi mal mudi
sam še vseeno bi prosil, če se komu da spisat tole čist na kratko?
ker se mi mal mudi
Zgodovina sprememb…
- spremenil: gtu ()
moowy123 ::
Evo, to dela tako kot ti hočeš.
public static void main(String[] args) { double start_value = -5.0; double step = 0.1; do { System.out.println(round(start_value,1)); start_value = start_value + step; } while (start_value <= 5.0); } public static double round(double value, int decimalPlace) { double power_of_ten = 1; while (decimalPlace-- > 0) power_of_ten *= 10.0; return Math.round(value * power_of_ten) / power_of_ten; }
netanyahu ::
Še bolje:
public class Loop { public static void main(String[] args) { double begin = -5.0, end = 5.0, step = 0.1; for(int i=0; i <= (int)((end-begin)/step); i++) { double a = begin + i*step; System.out.printf("%.4f\n", a); } } }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Fix skripte: nginx log + group by user-agent + count + sort descOddelek: Programiranje | 724 (647) | Invictus |
» | [ubunto] 8.10 in poraba procesorjaOddelek: Operacijski sistemi | 1432 (1200) | Jernej88_ |
» | [c#] enostavna Igrca -> poraba procesorja 95%Oddelek: Programiranje | 2165 (1529) | elKaktus |
» | [Java] Deljenje in ostanekOddelek: Programiranje | 3110 (2694) | pr2501 |
» | Slovenci imamo radi Firefox (strani: 1 2 )Oddelek: Novice / Brskalniki | 22550 (15563) | veteran |