C++ -ban ezt hogyan lehet értelmezni?
if (float d = ((float)(x1-x2) * (y3-y4)) - ((y1-y2) * (x3-x4)))
{
//kódrészlet
}
Szóval ezt kéne átírnom Java-ba, de ilyen feltétellel még nem találkoztam. Ez mikor lesz igaz és mikor nem?
akkor lesz igaz, ha a (bool)d igaz
vagyis ha d!=0.0
Az if feltételénél egy értékadás van, de a C/C++-ban az értékadás kifejezés is egyben. Tehát a d-be bekerül az egyenlőségjel utáni kifejezés, és ez a szám lesz a feltétel.
A feltétel pedig úgy néz ki, hogy ha 0 (nulla), akkor hamis, minden más érték pedig igaz.
Viszont nem túl szép megoldás lebegőpontos értéket használni itt. Ha integer (vagy pointer, enum, stb.) szerepelne, az gyors kódra fordul, és egyértelmű, de így float típussal semmivel sem lesz gyorsabb vagy átláthatóbb.
utolsó:
te inkább arra gondolsz, hogy bár a művelet eredménye papíron lehet, hogy nulla, a d már nem biztos, hogy ugyanúgy nulla lesz
olyan viszont nincs, hogy a 0 lebegőpontosként ábrázolva ne legyen egyenlő a 0.f - val
"olyan viszont nincs, hogy a 0 lebegőpontosként ábrázolva ne legyen egyenlő a 0.f - val"
De, elvben sajnos lehet, mármint hogy 0.f integerként nem nulla, és ez függhet fordítótól, de akár proci típustól is. Ugyanis az if() egyáltalán nem biztos, hogy implicit integerre konvertál, vagy ha igen, akkor is pont annyi ciklust hajt végre, mintha kitesszük a relációjelet. (==) De még a sima összehasonlítás is okozhat gondot, mert architektúrától is függhet, milyen tartalék pontossággal dolgozik a lebegőpontos egység.
Legjobb, ha explicit int-té alakítjuk. (int)(d=...)
Csak egy példa:
Most nem érek rá utánanézni, de tudomásom szerint cpp-ben ez nincs így (mármint a signed zero az rendben van, de bool(int)-ként false-ra értékelődik)
(kérdező reméljük már megkapta a választ és ez nem érdekli)
" a signed zero az rendben van, de bool(int)-ként false-ra értékelődik"
Lehet, őszintén szólva ezt nem tudom. De én akkor is kerülném a float-ot itt. :)
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!