Osaisko joku heittää kaavan, jolla voidaan skaalata arvoja? Esimerkiksi tähän tyyliin:
0-1024 -> 0-99
Siis niin että, jos minulla on vaikka arvo 254 niin sen arvo pitäisi saada asteikolta 0-99 selville. Skaalautuminen tarvii olla lineaarista.
x / 1024 * 99
Esimerkiksi 254 / 1024 * 99 ≈ 24,5566.
Ai niinpä tietenki, kiitos! :)
Edit. Tosin joudun varmaan tekeen sillai, että ((x * 1000)/1024 * 99)/1000, koska
kieli on C ja alustana on Atmellin prossu, eikä se käsitykseni mukaan osaa laskea desimaalilukuja.
x*99/1024 vois toimia siistimmin
Joo niin näköjään vois. Ehkä minunkin kannattais hetken miettiä ennen kuin suollan ulos paskaa. :D
Halusitko luvun ulos desimaalilukuna? Silloin:
x * 99.0 / 1024.0
En tarvi, enkä voi käyttää desimaalilukuja.
dartvaneri kirjoitti:
alustana on Atmellin prossu
Btw, kai tossa on isommat kuin 16-bittiset kokonaisluvut? Muuten et saa koskaan yli 63 tulokseksi.
Mikrokontrollereiden kanssa tulee joskus myös tilanteita että potku ei riitä ilman optimointia. Silloin voi auttaa laittaa (x*99)>>10 tosin fiksu kääntäjä tehnee tuon muutenkin. Jos käytössä on 16-bittiset luvut niin sitten voi tehdä esim: (x>>1*99)>>9
Onko muuten tarkoituksella 0-1024 -> 0-99, vai pitäisikö tuossa olla 0-1023 -> 0-99 tai vastaavasti 0-1024 -> 0-100 ?
Näyttävät niin oudoilta luvuilta, et veikkaan et dartvanerilla on jokin ajatuskatkos käynyt.
Jep, ongelmaksi tosiaan tuli tuo 16-bittiset luvut.
Lebe80, joo tarkoitus oli tuo 0-1023.
Ongelman ratkaisuna oli seuraava kaava:
x*50/516
En sitten tiedä kumpi on järkeväpää, kikkailla tuolla vai tuolla Grez:n tavalla.
No en osaa tarkemmin sanoa kun en tiedä mikä Atmelin prossu on kyseessä, mutta varsinkin vähempitehoisissa jakolasku on hidas operaatio. Tuollaista /516 jakoa kääntäjä ei edes pysty optimoimaan.
Okei, prossu on ATMega328.
Joo no toi x*50/516 vie noin 280 kellojaksoa kun taas (x>>1*99)>>9 noin 10-20 kellojaksoa. Eli jos koodin nopeudella on mitään väliä niin sitten tuo ehdotukseni on järkevämpi.
(Arviot perustuu tulkintaani Atmelin julkaisemista prossun spekseistä ja app noteista. Luvut saattaa siis heittää jonkin verran)
Okkei. Täytynee perehtyä enempi noihin shift operaatiohin, jos vaikutus kuitenkin on noin suuri, ei se näin pienessä projektissa ole niin mahdoton, mutta jos joskus isompia tekee, niin merkitys kasvaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.