Az miért van hogy ez a feltétel mindig teljesül?
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) ;
}
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.
"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:
----------------
"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.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!