Új hozzászólás Aktív témák
-
cousin333
addikt
válasz
mylastage
#2912
üzenetére
"Előfordul, hogy az 5-öt lefelé kerekíti - és két tizedesnél ez 1%."
Példa? Remélem nem a 7.850000000005-től vártad, hogy 7.86 legyen...
"az apróban való tárolás tényleg egy jó ötlet, de még mindig zavar, hogy szorzás esetén - ahol nincs szó végtelen tizedes törtről - hibás eredményt ad."
Nem, nem ad. A "klasszikus példádban" meg pont nincs szorzás. Az említett számábrázolási hiba legtöbbször minimális pontatlansággal jár (nem 1%), ha meg mindenképpen el akarod kerülni ezeket, akkor Decimal osztály, vagy sympy modul valódi törtekkel
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
kovisoft
őstag
válasz
mylastage
#2912
üzenetére
A sokadik tizedesjegynél való eltérés azért adódik, mert amikor nem egész számokkal dolgozik a számítógép, akkor lebegőpontosan tárolja azokat, kettedes tört formájában, és vannak véges tizedes törtek, amik csak végtelen kettedes törtként ábrázolhatóak (hasonlóan ahhoz, mint ahogy az 1/3-ot csak végtelen 0.33333... formájában tudjuk tizedes törtként ábrázolni, harmados törtként meg ez a 0.1), ezért óhatatlanul kerekítve lesznek. Ha egy ilyen végtelen kettedes törtet utána visszaalakítjuk tizedes törtté, akkor lesz ez a pici eltérés a tároláskori kerekítés miatt.
Ezért szokás a pénzügyi rendszereknél, ahol 1 fillér vagy cent sem térhet el, hogy egész számokkal dolgozunk, pl. mindent fillérben, egész számként tárolunk és számolunk, a számítások eredményét is egészre kerekítjük, kiírásnál pedig a 100-zal való osztás hányadosát és maradékát írjuk ki.
De én kipróbáltam a programodat egy round() beiktatásával, és nem látom, hogy hol adna rossz eredményt:
> while (szamlalo < 21):
... cad = round(arfolyam_eurtocad * szamlalo, 2)
... print (szamlalo, " EUR = ", cad, " CAD ")
... szamlalo = szamlalo + 1
...
1 EUR = 1.57 CAD
2 EUR = 3.14 CAD
3 EUR = 4.71 CAD
4 EUR = 6.28 CAD
5 EUR = 7.85 CAD
6 EUR = 9.42 CAD
7 EUR = 10.99 CAD
8 EUR = 12.56 CAD
9 EUR = 14.13 CAD
10 EUR = 15.7 CAD
11 EUR = 17.27 CAD
12 EUR = 18.84 CAD
13 EUR = 20.41 CAD
14 EUR = 21.98 CAD
15 EUR = 23.55 CAD
16 EUR = 25.12 CAD
17 EUR = 26.69 CAD
18 EUR = 28.26 CAD
19 EUR = 29.83 CAD
20 EUR = 31.4 CAD
Új hozzászólás Aktív témák
- Asztali PC R5 5500 RTX 2060 16GB DDR4 512GB NVME
- Core I7 4K MAGYAR ERŐMŰ Lenovo P1 Gen3 ( I7 10850H 32Gb 1 Tb) Tervező/vágó/gamer - Nvidia 4Gb!
- i7 11gen Lenovo ThinkPad T14s gen2 14" 4K UHD Kijelzővel!
- Bomba ár! Dell Latitude 7200 2-in-1: i5-8365U I 8GB I 256SSD I 12" FHD+ Touch I Cam I W11 I Gari!
- Core I7 4K OLED ERŐMŰ Lenovo P1 Gen3 ( I7 10850H 32Gb 1 Tb) ÉRINTŐS Tervező/vágó/gamer - Nvidia 4Gb!
- BESZÁMÍTÁS! Asus H370 i7 8700 16GB DDR4 512GB SSD RTX 2060 Super 8GB Zalman S2 TG Cooler Master 650W
- Bomba ár! Lenovo X13 G2 Yoga - i5-1145G7 I 16GB I 256SSD I 13,3" WUXGA Touch I W11 I Cam I Gari!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone 13 Pro 128GB Sierra Blue -1 ÉV GARANCIA -Kártyafüggetlen, MS3965
- GYÖNYÖRŰ iPhone 12 Mini 128GB Green-1 ÉV GARANCIA -Kártyafüggetlen, MS4169, 100% Akksi
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest
![;]](http://cdn.rios.hu/dl/s/v1.gif)

