Mi a különbség a double és long double között, ha mindkettő 15 számjegyig tud tárolni valós számokat?
Érdekes, mert nálam a sizeof 16 bájtot ír a long double-ra. Viszont ha includeolom a <limits> headert és kiíratom a long double minimum és maximum értékét, akkor azok jelentősen eltérnek:
cout << numeric_limits<long double>::min() << endl;
3.3621e-4932
cout << numeric_limits<long double>::max() << endl;
1.18973e+4932
Ebből arra tippelnék, hogy nem 16 bájt az, hanem csak 10 (azaz 80 bit).
Bár egyébként mindkettő óriási érték. 1.18973 * 10^4932.
Nem értem mit akartál a numeric_limits-szel mondani, de:
Azért nem 10 bájtot ír ki hanem többet mert 32 bites rendszereken az adatokat általában kiegészíti a fordító a 4 bájt többszörösére, míg 64 bites rendszereken a 8 többszörösére. Az adatod attól még 10 bájtos marad, a 16-ból a maradék 6-ot nem használja.
Ennek okáról több info itt:
GCC-n 10 bájt a long double ezért 12 bájtot foglal 32 biten, 16 bájtot foglal 64 biten.
VC++-on 8 bájt a long double így 8 bájtot foglal 32 és 64 biten is.
A numeric_limits kiírta neked a legkisebb (lásd a negatív előjelet!) és a legnagyobb ábrázolható pozitív lebegőpontos számot.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!