Java

« previous entry | next entry »
Mar. 13., 2011 | 12:56 pm
posted by: sursurs in pajautaa

it kā elementāra lieta, BET, kāpēc kods:
     double rez;
     rez=0;
     for(int i=1; i<6; i++) {
	//rez=(1/i);
	rez+=1/((3*i-2)*(3*i+1));
        System.out.println(rez);
     }


man atgriež:
0.0
0.0
0.0
0.0
0.0
Ja pamēģina aizkomentēto, tad pirmais no skaitļiem ir 1.0. Respektīvi - tikko skaitlis ir mazāks par 1, tā izmet 0.0 nevis attiecīgi 0.25 vai 0.5 vai whatever??!!

p.s. tas nav vajadzīgs kkādai rocket science, bet vnk es te eju cauri vienam savam kōdam, kas skolā vajadzīgs lab-darbiem un šķiet atradu, ka tieši šitā visa dēļ man nekas neiet kā vajadzētu :(
Tags:

# | jā, ir doma! | Add to Memories


Comments {2}

qgmr101

from: [info]qgmr101
date: Mar. 13., 2011 - 02:02 pm
#

Tas notiek tāpēc, ka int dalot ar int vienmēr sanāk int.
Risinājums varētu būt pateikt Java'i, ka 1 ir double, šādi: 1d

rez+=1d/((3*i-2)*(3*i+1));
vai
rez+=1/(double)((3*i-2)*(3*i+1));

Literatūra:
The Java Language Specification, Third Edition (visas pārējās grāmatas būtībā atgremo šo dažādās formās).

Un konkrētajam gadījumam:
1. 15.8.1 Lexical Literals
2. 5.6.2 Binary Numeric Promotion
3. 3.10.2 Floating-Point Literals

Atbildēt | Diskusija


from: [info]sursurs
date: Mar. 13., 2011 - 02:18 pm
#

Paldies Tev ar - šādi laikam būs pat vienkāršāk nekā definēt i kā double skaitli :)

Atbildēt | Iepriekšējais