Kezdőoldal » Számítástechnika » Programozás » Az miért van hogy ez a feltéte...

Az miért van hogy ez a feltétel mindig teljesül?

Figyelt kérdés

void cKeno::i_setTet(void)

{

bool x = false, y = true ;

do

{

if(x == true)

{

cout << "Csak ezekkel a tetekkel rakhatod meg: (0.30),(0.60),(0.90),(1,20) ! \n"

<< "Add be ujra a tetet: " ;

cin >> this->i_tet ;

}


if(x == false)

{

x = true ;

cout << "\nMennyiert adod fel a szelvenyt(0.30),(0.60),(0.90),(1,20): " ;

cin >> this->i_tet ;

if(this->i_tet == 0.30 || 0.60 || 0.90 || 1.20)

y = false ;

}

}while(y) ;

}


2012. nov. 2. 23:09
1 2
 11/13 A kérdező kommentje:

Amúgy a doubleval sem működik de át írtam short típusra.

Akkorhol alkalmazzak lebegőpontosat ha a számítógép nem képes még csak megvizsgálni,hogy ugyan az e.

2012. nov. 3. 03:55
 12/13 anonim ***** válasza:

"Amúgy a valós az egy hülye név rá, mert az egész számok is valósak, a float semennyivel sem valósabb, mint az int."

A float annyival valósabb, hogy egész számok közötti értékeket is felvehet, a valós számok nem csak egész számok, pl. pascal-ba real (magyarul valós) típusnév van rá adva float helyett. Azt elismerem hogy precízebb a float azaz lebegő(pontos) típusnév/kifejezés rá.

----------------

"Amúgy a doubleval sem működik de át írtam short típusra. "

Ez hardver, fordítóprogram és OS függő, hogy működik e, ezért fogalmaztam úgy hogy első megközelítésben.

"Akkorhol alkalmazzak lebegőpontosat ha a számítógép nem képes még csak megvizsgálni,hogy ugyan az e."

Pontosan megvizsgálja hogy egyenlő e. A cin az egy string-et egy karakter sorozatot olvas a standard inputról és ezt alakítja float típussá, mivel a float nem tudja pontosan ábrázolni a 0.3-at vagy másként a float számhalmaznak nem eleme a 0.3 ezért egy közelítő értékkel helyettesíti, a 0.3 megadott konstanst is csak egy közelítő értékkel lett helyettesítve, nem biztos hogy a kettő közelítő érték megegyezik, ha pont megegyezik azaz pont ugyan azt "tévedte" akkor beletrafálhatunk hogy pont egyenlőséget ad a vizsgállat, viszont tartsuk be : "ökölszabály:lebegőpontos számot soha nem vizsgálunk egyenlőségre."

A példa kedvéért ettől eltekintettem a példában, így jól látható amiről írtam:

[link]

----------------

"Akkorhol alkalmazzak lebegőpontosat"

Ott ahol szükség van egész számok közötti számokra is, ezekkel viszont tisztába kell lenni és ha kell korrigálni a számítási hibákat.

pl van egy timer-ed ami float értéket ad vissza másodpercben adja meg hol tart időben.

5 másodpercig kell csinália valamit egy ciklusnak:

do{

.... // tevékenységek

} timer()>=5.0;// és nem timer()==5.0

Ahol az idő (jó közelítéssel) folytonos, nem csak egész másodpercek vannak.

2012. nov. 3. 10:19
Hasznos számodra ez a válasz?
 13/13 iostream ***** válasza:

Ha nem akarsz ilyenekkel szívni, akkor használhatsz fixpontos törtszámokat is, vagy ténylegesen racionális számokat (két egész hányadosaként ábrázolva a számot), de mindkettőt magadnak kell megírnod, vagy külső libet behúzni.

Itt két egyenlő szám tényleg egyenlő lesz, de garantálni persze itt sem garantálja semmi, hogy a beolvasás és a konstansok ugyanarra értékelődnek ki.

2012. nov. 3. 12:52
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!