C++ nyelvben hogyan oldható meg a tört számok pontos tárolása?
A probléma:
Létezik-e esetleg olyan típus, mint a basic nyelvben a currency?










Vagy - ha közönséges törtekkel akarsz operálni, alkothatsz erre osztályt - itt egy példa a kivitelezésre:





Vannak tetszőleges precizitású aritmetikát megvalósító szoftverkönyvtárak:





Maga a számítógép ennyi biten tud dolgozni, ezt lehet mókolgatni bigDouble osztályokkal, ami lista vagy tömb használatával bővíti ki, de maga a számolás ott hatványozottan lassul emiatt. A Fraction osztályok is nehezítik a műveleteket, mivel minden műveletet és számot arra kell "konvertálni".
De ha valamire nem elég a long double, akkor elég érdekes problémán dolgozhatsz. Csak nem a Pí vagy a gyök kettő számolása?










A 6-os írja a jó dolgokat, a Currency adattípus mögött egy integer jellegű adattárolás van, ezért lesz mindig négy tizedes jegye. "The decimal point is fixed and is followed by four decimal places." A -922337203685477.5808 és +922337203685477.5807 közötti értelmezési tartomány is erre utal, hiszen a tartomány legnagyobb értéke felszorozva tízezerrel épp hexa 7FFFFFFFFFFFFFFF.
Nem tudom mire kell, de ha valóban pénzügyi számításokhoz, akkor használj egész tárolási értéket, minden értéket felszorozva tízezerrel, csak kiíratásnál hajtsd végre a tízezerrel való visszaosztás. De ha csak centekkel akarsz számolni, akkor elég a százas osztás/szorzás is.
Ha viszont másra kell, akkor nem biztos jó. Ennél az adattípusnál pl. a 1/3 művelet értelmezhetetlen.





2-es válaszoló jól beszél. Ilyesmit érdemes használni, ha tört számokat szeretnél használni. Ha irracionális számokat is támogatni akarsz akkor az egy picit nehezebb lesz a dolog.
C++ ban erre érdemes osztályt definiálni még akkor is ha a leosztásos módszert választod.
"A Fraction osztályok is nehezítik a műveleteket, mivel minden műveletet és számot arra kell "konvertálni"."
A konvertálástól ne ijedj meg. Egy-két egész számokkal végzett műveletet egyáltalán nem számít.





Találtam valamit, ami talán segíthet:
Nálam nem működött sem a fejléc, sem a névtér miatt, de nem vagyok programozó, szóval neked simán működhet.
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!