Hogyan tudnám ezt a hibát megtalálni, ha localba nem jön elő?
Most kicsit meg vagyok lőve, mert gyakornok vagyok, és mindkét mentorom szabin van a héten. Röviden annyi a probléma, hogy van egy kód(scalaban írva), amit ha a céges környezetben lefuttatok, több száz millió sornyi adattal, akkor hibára fut. Viszont ha ugyan ezt a kódot lefuttatom localba, IDE-n belül, unit tesztekkel, dummy adattal vagy csak az eredeti adat egy részével, akkor hiba nélkül lefut. Nem tudom, hogy hogyan tudnám reprodukálni a hibát.
Az egész adatot nem tudom localba lehúzni, mert bazi nagy. A céges környezetbe(clusterekbe) nem tudok belenyúlni, csak futtatni, így ott nem tudok debuggolni. Megnéztem az adatot, nincsen benne hiba vagy outlier, olyanok a a statisztikái mint az összes más hasonló adathalmaznak.
Szűrés csak a végeredmény kiszámolása után van, úgyhogy az kilőve. Viszont van egy pár transzformáció/skálázás az adatokon. Lehet, hogy emiatt lenne más az eredmény, hogy a transzformációk alatt/után rengeteg lebegőpontos szám lesz összeadva? Az eltérés amúgy sok helyen jelentős: 0 és 1 közötti számok a végeredmények, és valahol 3-4 tizedes eltérés is van az elvárthoz képest.
A nullok kivannak szűrve, negatívok meg elvileg nem fordulhatnak elő. Illetve alul/túlcsordulás alatt mit értesz pontosan?
5
Alul/túlcsordulás integereknél van, ahol ugyebár van egy max érték, ami lehet benne, ha ezen túl lépsz összeadásokkal, akkor kezdi a legkisebb számtól.
pl. 8 bites unsigned-nál, ha 255-ön vagy, hozzáadsz 1-et, akkor 0 lesz az eredmény
Ha lebegőpontosat használtok, ott ilyen nincs, viszont minél nagyobb számokat használtok, annál pontatlanabb lesz. De ez eleve nem 100% pontos, főleg a float. Illetve ha először nagyon nagy szám lesz, majd utána normalizáljátok, akkor simán előjöhetnek nagyobb pontatlanságok
#5 - Igen, lehet amiatt. Próbáld meg úgy, hogy összeadás előtt rendezed az adatokat lebegőpontosokra növekvő sorrendben. Így is lesz pontatlanság, de kisebb mértékű.
Alul és túlcsordulás van lebegőpontos műveleteknél is, csak ritkábban kerül elő, mert többnyire másképp és másra használjuk őket. Ettől független van min/max értékük, és ha azon túl akarsz hozzáadni vagy kivonni, akkor alul vagy túl fog csordulni. (Ha szerencséd van, akkor nem csak csendben túlcsordul, hanem kapsz valamilyen aritmetikai kivételt)
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!