Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Egyenlőre még nincsen rajta semmi, de azok a lábak is fel vannak használva, ledek lesznek rá kötve.
Ha kiolvasod a FUSE biteket, akkor abból kiderül, hogy mi az alapbeállítása az órajelnek. Ha már ISP csatit használsz, a fuse bitekhez is hozzáférsz.
A programozó lábakon levő kis értékű kondi is megakadályozhatja a programfeltöltést! A hozzászólás módosítva: Jan 31, 2019
Sajnos ic csere lett a vége, semmilyen módon nem tudtam semmihez se hozzáférni, a fuse biteket sem értem el, kondik se voltak a programozó lábakon. De az új ic-vel már működik minden.
Azért csak rakd félre az IC-t, lehet később fel tudod éleszteni. Valószínűleg valamit elállíthattál, nem hiszem, hogy tönkrement volna.
Egy két tizedes pontos számot szeretnék helyiértékekre bontani, de valamiért nem jó ez eredmény:
Ezt adja vissza: Szam: 12345.67 Tizezer: 1 Ezer: 2 Szaz: 3 Tíz: 4 Egy: 5 Tized: 6 Szazad: 6 Tizedes: 66 Egeszszam: 12345 Arra a gondolok a változó típusok kevernek be, de nem jövök rá miért nem jön ki a helyes válasz. Ha van erre "elengánsabb" megoldás, azt is szivesen fogadom.
A tizedesek is int-ek, azért nem jó. Legyenek float-ok, és jó lesz szerintem.
szerk: Benéztem, azt hittem a csonkolással van gond. Én úgy csinálnám, hogy felszoroznám 100-zal, és mint fentebb ugyanúgy bontanám tényezőkre. Nyilván fejben tartva hogy most már eltoltam a helyiértéket. Mindenesetre az MCU-k jobban szeretnek egésszel számolni mint törtekkel. szerk2: A tizedes_float-nál van a gond a 24. sorban. Annak 67-nek kellene lenni, nem 66-nak. Érdekes.. ![]() A hozzászólás módosítva: Feb 1, 2019
Hiába cserélem float-ra, ugyanaz.
Lássuk a kezdetben 100-as szorzást. A hozzászólás módosítva: Feb 1, 2019
Már a legelső alkalommal sem működött, de ahogy mondod félre rakom.
Szam: 12345.67 Szorzott: 1234567.00 Tizezer: 1 Ezer: 2 Szaz: 3 Tíz: 315 Egy: 0 Tized: 6 Szazad: 61 ![]()
Még nézegetem mert nagyon fura, de a szorzott az ne float hanem long legyen inkább!
20. sorban rontottad el!
helyette
Meg az összes többi helyen is ![]() Próba, aztán nézzük tovább! A hozzászólás módosítva: Feb 1, 2019
Meg a tiz*100 helyeken is tiz*1000, az egy*10 helyett meg egy*100!
Szam: 12345.90 Szorzott: 1234590 Tizezer: 1 Ezer: 2 Szaz: 3 Tíz: 4 Egy: 5 Tized: 9 Szazad: 0 Szam: 12345.91 Szorzott: 1234590 Tizezer: 1 Ezer: 2 Szaz: 3 Tíz: 4 Egy: 5 Tized: 9 Szazad: 0 Szam: 12345.92 Szorzott: 1234591 Tizezer: 1 Ezer: 2 Szaz: 3 Tíz: 4 Egy: 5 Tized: 9 Szazad: 1 Továbbra is: ![]() A szorzott számot jól bontja fel, csak a szorzat mindig jó. A hozzászólás módosítva: Feb 1, 2019
Ez érdekes. De legalább már félig megoldottuk! A teljes kódot másold már be, mert az ördög mindig a részletekbe bújik bele! A szorzott típusa pl most float vagy long?
A hozzászólás módosítva: Feb 1, 2019
Hát a felbontás most már ki lehet szervezni egy függvénybe, és kérdés csak az marad, hogy a loopban ha növeled egy float változó értékét, akkor ha értékül adod egy long-nak a 100*szorosát, akkor miért számolja rosszul.
Ez mit csinál?
"Hibázik" :
Szam: 12346.72 Szorzott: 1234672 Szam: 12346.73 Szorzott: 1234673 Szam: 12346.74 Szorzott: 1234673 Szam: 12346.75 Szorzott: 1234674
Azt irja, hogy néha furcsa eredmények jönnek ki, és a számolások nem pontosak.
Magyarul nyugodjak bele és kész? "Ez ilyen.." ?
Próbáld ki, hogy .00-át teszel a szorzók mögé is. Hátha. És esteleg használd az int(x) függvényt a konverzióhoz.
A hozzászólás módosítva: Feb 1, 2019
Ennyi a redukált kód:
Szam: 12346.32 Szorzott: 1234631 Szam: 12346.33 Szorzott: 1234632 Szam: 12346.34 Szorzott: 1234633
Úgy néz ki, ez egy Bug. Kár, hogy nem tudom most kipróbálni.
Esetleg még így egy próba:
A hozzászólás módosítva: Feb 1, 2019
Remélem rosszul látom...:
Bővebben: Link Idézet: „Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.”
Azaz próbáld meg double-al.
duble ==> ugyanaz
szorzott = long(szam * 100.00); ==> ugyanaz
Mivel 24 bit jut a floatnál a számjegyeknek, ez behatárolja a pontosságot. Ráadásul az átváltásoknál jó eséllyel fixen lefelé kerekít.
A fix lefelé kerekítés okozta hiba megszüntetésére pedig ezt alkalmaznám:
A poén kedvéért próbáld már ki három tizedesre is!
Lehet érdemes lenne megpróbálni egy másik régebbi fordítóval is, hátha csak ez szívat. A hozzászólás módosítva: Feb 1, 2019
Van még ötletem!
Legyen egy egész rész, meg legyen egy tört! Az egész rész 100 szorosához add hozzá a tört rész száz szorosát! Így nem mész ki az érték tartományból.
Jó ötlet!
Nagyot csalódnék, ha ekkora hibaszázalékkal számol... Ez azért már nem kis hiba lenne, de attól tartok ez bizony ilyen lesz...
Na, így gondoltam. Próba! A hozzászólás módosítva: Feb 1, 2019
|
Bejelentkezés
Hirdetés |