Kezdőoldal » Számítástechnika » Programozás » C++ -ban ezt hogyan lehet...

C++ -ban ezt hogyan lehet értelmezni?

Figyelt kérdés

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?


2013. okt. 13. 21:09
 1/9 anonim ***** válasza:
100%

akkor lesz igaz, ha a (bool)d igaz

vagyis ha d!=0.0

2013. okt. 13. 22:10
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:
Köszi!
2013. okt. 14. 00:55
 3/9 anonim ***** válasza:

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.

2013. okt. 14. 17:39
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
Arról nem is beszélve, hogy a nulla többféleképpen is ábrázolható szabvány szerint, nem csak csupa nullával.
2013. okt. 14. 21:54
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

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

2013. okt. 15. 02:08
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:

"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:

[link]

2013. okt. 15. 09:47
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:

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)

2013. okt. 15. 12:53
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:

" 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. :)

2013. okt. 15. 12:57
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:
Igen, már megkaptam a választ és feltételnél nincs is float, mivel az csak értékadáshoz kell és a Java nem igazán kedvelte az értékadásos feltételt. Eredetiben volt így, azért írtam le így, de azért az okosságokat magamba szívtam, amiket még írtatok utána, hátha a későbbiekben hasznosítani tudom. :)
2013. okt. 15. 13:07

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!