Citace od: Petr M kdy 08. 09. 2016, 21:22:50Citace od: gl kdy 08. 09. 2016, 19:16:14Noef píše o dělání webů.Jenomže ještě nepochopil, že opravdový profesionál bez ohledu na obor má nějakou profesní čest. A ta mu nedovolí odflinknout dílo. Profík si netroufne prodávat stůl s kratší nohou, přesolený žrádlo, jiskřící rozvaděč, lak na autě samou bublinu nebo program, u kterýho neví, jak vlastně funguje. Vymlouvat se, že to sám umí líp, ale ostatní jsou matláci a jenom se jim přizpůsobuje, a ještě se tím chlubit, zvládne jenom ten "nejlepší z nejlepších".
Citace od: gl kdy 08. 09. 2016, 19:16:14Noef píše o dělání webů.
Citace od: javaman (( kdy 08. 09. 2016, 18:59:43A tohle Java dělá za mě, takže se můžu soustředit na opravdovou práci. Lopaty budou přemýšlet, jestli použít posun
class javaman{ public static void main(String[] args) { if (pow(62) != shift(62)) { System.out.println("javaman je borec"); } if (pow(63) != shift(63)) { System.out.println("javaman je lopata"); } } public static double pow(long exponent) { return Math.pow(2, exponent); } public static double shift(long exponent) { return 1L << exponent; }}
Citace od: Petr M kdy 08. 09. 2016, 21:40:57A ke zpracování signálů na jednom řádku - mezi zpracování signálů se dá započítat třeba FIR filtr 1. řádu u ADC na potlačení šumu.Třeba derivační článek xn+1 = 7/8*xn + 1/8*a se napíše v C v přerušení 12b ADC takto:Kód [Vybrat] Rozbalitvolatile uint16_t x = 0;void ADC_ISR(void) { x = ((x << 3) - x + ADC_VALUE) >> 3;}Třeba u ARMu s barrel shifterem je to velice efektivní metoda. Jenom vědět, jak na to bez násobení a floatů. Python nedělám, ale pokud by chtěl stejně filtrovat data, tak princip bude pořád stejný. A taky se to asi vejde na jednu lajnu...
volatile uint16_t x = 0;void ADC_ISR(void) { x = ((x << 3) - x + ADC_VALUE) >> 3;}
x = (x*7 + ADC_VALUE)//8
Citace od: gamer kdy 08. 09. 2016, 22:05:48Citace od: javaman (( kdy 08. 09. 2016, 18:59:43A tohle Java dělá za mě, takže se můžu soustředit na opravdovou práci. Lopaty budou přemýšlet, jestli použít posun Java to za tebe neudělá, protože ani java compiler nemá křišťálovou kouli.Kód [Vybrat] Rozbalitclass javaman{ public static void main(String[] args) { if (pow(62) != shift(62)) { System.out.println("javaman je borec"); } if (pow(63) != shift(63)) { System.out.println("javaman je lopata"); } } public static double pow(long exponent) { return Math.pow(2, exponent); } public static double shift(long exponent) { return 1L << exponent; }}Za domácí úkol se zkus zamyslet, proč jsi lopata.
Citace od: javaman (( kdy 08. 09. 2016, 22:11:30A co jsi tím teda chtěl říct?
Citace od: gamer kdy 08. 09. 2016, 22:13:27Citace od: javaman (( kdy 08. 09. 2016, 22:11:30A co jsi tím teda chtěl říct?Ty nerozumíš ani tak jednoduchému kódu, že? Chceš nějakou nápovědu?
Citace od: javaman (( kdy 08. 09. 2016, 22:27:29Citace od: gamer kdy 08. 09. 2016, 22:13:27Citace od: javaman (( kdy 08. 09. 2016, 22:11:30A co jsi tím teda chtěl říct?Ty nerozumíš ani tak jednoduchému kódu, že? Chceš nějakou nápovědu?Ano.
Citace od: gamer kdy 08. 09. 2016, 22:43:59Citace od: javaman (( kdy 08. 09. 2016, 22:27:29Citace od: gamer kdy 08. 09. 2016, 22:13:27Citace od: javaman (( kdy 08. 09. 2016, 22:11:30A co jsi tím teda chtěl říct?Ty nerozumíš ani tak jednoduchému kódu, že? Chceš nějakou nápovědu?Ano.Můžeš začít tady: http://stackoverflow.com/questions/8373415/difference-between-shl-and-sal-in-80x86a pak se zkus zamyslet, co taková instrukce udělá se signed číslem, když není rozdíl mezi arithmetic a logical shiftem.
Citace od: gl kdy 08. 09. 2016, 22:07:53Citace od: Petr M kdy 08. 09. 2016, 21:40:57A ke zpracování signálů na jednom řádku - mezi zpracování signálů se dá započítat třeba FIR filtr 1. řádu u ADC na potlačení šumu.Třeba derivační článek xn+1 = 7/8*xn + 1/8*a se napíše v C v přerušení 12b ADC takto:Kód [Vybrat] Rozbalitvolatile uint16_t x = 0;void ADC_ISR(void) { x = ((x << 3) - x + ADC_VALUE) >> 3;}Třeba u ARMu s barrel shifterem je to velice efektivní metoda. Jenom vědět, jak na to bez násobení a floatů. Python nedělám, ale pokud by chtěl stejně filtrovat data, tak princip bude pořád stejný. A taky se to asi vejde na jednu lajnu...v Pythonu na běžném procesoru je IMHOKód [Vybrat] Rozbalitx = (x*7 + ADC_VALUE)//8stejně rychlé a je to přesnější přepis toho vzorce. Snáz se to čte.
import numpy as npimport scipy as spfrom scipy.weave import inlinedef my_fir(arr): assert isinstance(arr, np.ndarray) n = len(arr) code = """ int x = 0; for(int i = 0; i < n; i++) { x = ((x << 3) - x + arr[i]) >> 3; arr[i] = x; } """ inline(code, ['arr', 'n'], compiler='gcc') return arrarr = np.array(range(20))newarr = my_fir(arr)print newarr
Citace od: gamer kdy 08. 09. 2016, 23:01:28Ano, to je samozřejmě další důvod, proč nejde zaměňovat pow a shift... Nicméně tady není problém s double ani s přesností:pow(63): 9.223372036854776E18shift(63): -9.223372036854776E18