Kezdőoldal » Számítástechnika » Programozás » C++ nyelvben hogyan oldható...

C++ nyelvben hogyan oldható meg a tört számok pontos tárolása?

Figyelt kérdés

A probléma:

[link]


Létezik-e esetleg olyan típus, mint a basic nyelvben a currency?

[link]



2020. okt. 20. 13:54
 1/10 anonim ***** válasza:
70%
Double. De ez se tűpontos, csak sokkal pontosabb a floatnál, 2-3 tizedesjegy gond nélkül belemegy.
2020. okt. 20. 13:57
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
64%

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

[link]

2020. okt. 20. 15:28
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:
Olyan kéne, mint a basicben a currency. Vagyis a doublenél sokkal pontosabb.
2020. okt. 20. 15:49
 4/10 anonim ***** válasza:

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

[link]

2020. okt. 20. 16:23
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:
0%

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?

2020. okt. 20. 16:32
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:
A Currency nem "sokkal pontosabb", hanem teljesen más módon működik. De ha belegondolsz, hogy mi is a currency, akkor szerintem már meg is van, hogy hogy lehet hasonlót szoftveresen megoldani. Az ugyanis "skálázott egész", gyakorlatilag egy egész szám, aminek az utolsó 4 (?) számjegyét tizedesnek tekintjük. Veszel egy long long intet, és csak annyi, hogy az utolsó 4 számjegy elé kiírsz egy tizedesvesszőt. (Meg oké, szorzás/osztás után kelleni fog némi korrekció, de szerintem ez sem vészes.)
2020. okt. 20. 17:25
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:

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.

2020. okt. 20. 18:13
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:
köszi a válaszokat!
2020. okt. 20. 18:28
 9/10 anonim ***** válasza:

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.

2020. okt. 21. 23:07
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

Találtam valamit, ami talán segíthet:


[link]


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.

2020. okt. 31. 13:44
Hasznos számodra ez a válasz?

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

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!