Bitové operace ve vyšších jazycích

Ivan Nový

Re:Bitové operace ve vyšších jazycích
« Odpověď #195 kdy: 08. 09. 2016, 15:33:04 »
Citace od: gl kdy 08. 09. 2016, 14:47:46
Citace od: gamer kdy 08. 09. 2016, 14:33:10
Citace od: gl kdy 08. 09. 2016, 13:59:44
Máš nějaký příklad filtru implementovaného v pythonu, kde se pužívá bitový posun, nebo si tu jen honíš triko?
https://github.com/scipy/scipy/blob/master/scipy/signal/wavelets.py#L153
Ale proč to sem vlastně dávám, je mi jasné, že podle místních frikulínů tohle vlasně nikdo nedělá a ani nepotřebuje znát...

To není filtr. To je jen výpočet mocniny dvojky v parametru funkce vytvářející pole. Normální člověk by to napsal takto:


x = np.arange(0, N * 2 ** J, dtype=float) / (2 ** J)


Na rychlosti tady opravdu nezáleží.
A takové věci právě vznikají, když programátor dobře nezná tyto operace, pak při přepisování kódu, který byl původně v C do pythonu, tam ponechá právě tyto zbytečné konstrukce.


javaman ((

Re:Bitové operace ve vyšších jazycích
« Odpověď #196 kdy: 08. 09. 2016, 15:37:20 »
Citace od: v kdy 08. 09. 2016, 15:24:17
Citace od: javaman (( kdy 08. 09. 2016, 15:18:39
Nebo kdyby kuchař neuměl nakrájet cibuli, co?  ;D
spíš jako by neuměl uvařit polívku jinak než z prášku

Problém je v tom, že zaměňuješ manuální dělníky s vývojářem. Vývoj se nedá naučit.

v

Re:Bitové operace ve vyšších jazycích
« Odpověď #197 kdy: 08. 09. 2016, 15:39:35 »
Citace od: javaman (( kdy 08. 09. 2016, 15:37:20
Citace od: v kdy 08. 09. 2016, 15:24:17
Citace od: javaman (( kdy 08. 09. 2016, 15:18:39
Nebo kdyby kuchař neuměl nakrájet cibuli, co?  ;D
spíš jako by neuměl uvařit polívku jinak než z prášku

Problém je v tom, že zaměňuješ manuální dělníky s vývojářem. Vývoj se nedá naučit.
problém (jeden z problémů) je, že jste pitomec

gamer

Re:Bitové operace ve vyšších jazycích
« Odpověď #198 kdy: 08. 09. 2016, 15:40:39 »
Citace od: gl kdy 08. 09. 2016, 14:47:46
To není filtr. To je jen výpočet mocniny dvojky v parametru funkce vytvářející pole.
Asi nerozumím řeči tvého kmene... To si jako představuješ, že je nějaký filtr implementovaný na jeden řádek? Viděl jsi ten kód kolem, nebo ses vůbec neobtěžoval?

Citace od: gl kdy 08. 09. 2016, 14:47:46
Normální člověk by to napsal takto:
Takže normální je ten, kdo nepoužívá a pokud možno ani nezná bitové operace. Když je použije, tak je nenormální. Hrozná demagogie.

gl

Re:Bitové operace ve vyšších jazycích
« Odpověď #199 kdy: 08. 09. 2016, 15:41:15 »
Citace od: Ivan Nový kdy 08. 09. 2016, 15:33:04
Citace od: gl kdy 08. 09. 2016, 14:47:46
Citace od: gamer kdy 08. 09. 2016, 14:33:10
Citace od: gl kdy 08. 09. 2016, 13:59:44
Máš nějaký příklad filtru implementovaného v pythonu, kde se pužívá bitový posun, nebo si tu jen honíš triko?
https://github.com/scipy/scipy/blob/master/scipy/signal/wavelets.py#L153
Ale proč to sem vlastně dávám, je mi jasné, že podle místních frikulínů tohle vlasně nikdo nedělá a ani nepotřebuje znát...

To není filtr. To je jen výpočet mocniny dvojky v parametru funkce vytvářející pole. Normální člověk by to napsal takto:


x = np.arange(0, N * 2 ** J, dtype=float) / (2 ** J)


Na rychlosti tady opravdu nezáleží.
A takové věci právě vznikají, když programátor dobře nezná tyto operace, pak při přepisování kódu, který byl původně v C do pythonu, tam ponechá právě tyto zbytečné konstrukce.


N * (1 << J)


by vypadalo divně i v C. Proč ne jen N  << J?


Re:Bitové operace ve vyšších jazycích
« Odpověď #200 kdy: 08. 09. 2016, 15:42:20 »
Citace od: javaman (( kdy 08. 09. 2016, 15:37:20
Problém je v tom, že zaměňuješ manuální dělníky s vývojářem. Vývoj se nedá naučit.

Tak urcite. A ty jsi vypadnul z Diovy hlavy.

gamer

Re:Bitové operace ve vyšších jazycích
« Odpověď #201 kdy: 08. 09. 2016, 15:43:07 »
Citace od: Ivan Nový kdy 08. 09. 2016, 15:33:04
A takové věci právě vznikají, když programátor dobře nezná tyto operace, pak při přepisování kódu, který byl původně v C do pythonu, tam ponechá právě tyto zbytečné konstrukce.
Další co se vůbec neobtěžoval podívat se na kód: https://github.com/scipy/scipy/blob/master/scipy/signal/wavelets.py#L98
Tady je to opravdu samá lopata...

javaman ((

Re:Bitové operace ve vyšších jazycích
« Odpověď #202 kdy: 08. 09. 2016, 15:45:10 »
Citace od: v kdy 08. 09. 2016, 15:39:35
Citace od: javaman (( kdy 08. 09. 2016, 15:37:20
Citace od: v kdy 08. 09. 2016, 15:24:17
Citace od: javaman (( kdy 08. 09. 2016, 15:18:39
Nebo kdyby kuchař neuměl nakrájet cibuli, co?  ;D
spíš jako by neuměl uvařit polívku jinak než z prášku

Problém je v tom, že zaměňuješ manuální dělníky s vývojářem. Vývoj se nedá naučit.
problém (jeden z problémů) je, že jste pitomec

A? Jak to souvisí s tvým zaměňováním?

gl

Re:Bitové operace ve vyšších jazycích
« Odpověď #203 kdy: 08. 09. 2016, 15:49:57 »
Citace od: gamer kdy 08. 09. 2016, 15:40:39
Citace od: gl kdy 08. 09. 2016, 14:47:46
To není filtr. To je jen výpočet mocniny dvojky v parametru funkce vytvářející pole.
Asi nerozumím řeči tvého kmene... To si jako představuješ, že je nějaký filtr implementovaný na jeden řádek? Viděl jsi ten kód kolem, nebo ses vůbec neobtěžoval?

Citace od: gl kdy 08. 09. 2016, 14:47:46
Normální člověk by to napsal takto:
Takže normální je ten, kdo nepoužívá a pokud možno ani nezná bitové operace. Když je použije, tak je nenormální. Hrozná demagogie.

Pod filtrem jsem si představoval operaci, která bude praváděna mnohokrát, bude tedy dávat smysl ji optimalizovat. Ten kód co jsi poslal, spočte konstantu, vytvoří pole a po prvcích ho vydělí konstantou. Tu konstantu ale spočte jen jednou. Navíc si jsem jistý, že << není rychlejší než **.

Tobě opravdu nepřijde přirozenější zapisovat umocňování jako umocňování a ne jako bitový posun? V matematických vzorcích také píšeš 1 << N namísto 2^N?

Ivan Nový

Re:Bitové operace ve vyšších jazycích
« Odpověď #204 kdy: 08. 09. 2016, 15:52:25 »
Citace od: gl kdy 08. 09. 2016, 15:41:15


N * (1 << J)


by vypadalo divně i v C. Proč ne jen N  << J?

No nevím, zřejmě proto, aby generovalo v cyklu N * další_násobek_2, tedy řadu n*2, n*4, n*8, ... pokud by J iterovalo od 1 .. 64


Ale zase na druhé straně, kdyby někdo chtěl v Pythonu implementovat generátor náhodných čísel ISAAC, tak by operace shift potřeboval, a nebo ne, a vystačil by s násobením a dělením 2? :-)))

gl

Re:Bitové operace ve vyšších jazycích
« Odpověď #205 kdy: 08. 09. 2016, 15:55:34 »
Citace od: gamer kdy 08. 09. 2016, 15:43:07
Citace od: Ivan Nový kdy 08. 09. 2016, 15:33:04
A takové věci právě vznikají, když programátor dobře nezná tyto operace, pak při přepisování kódu, který byl původně v C do pythonu, tam ponechá právě tyto zbytečné konstrukce.
Další co se vůbec neobtěžoval podívat se na kód: https://github.com/scipy/scipy/blob/master/scipy/signal/wavelets.py#L98
Tady je to opravdu samá lopata...

a ??

Ivan Nový

Re:Bitové operace ve vyšších jazycích
« Odpověď #206 kdy: 08. 09. 2016, 15:55:46 »
Citace od: gl kdy 08. 09. 2016, 15:49:57
Citace od: gamer kdy 08. 09. 2016, 15:40:39
Citace od: gl kdy 08. 09. 2016, 14:47:46
To není filtr. To je jen výpočet mocniny dvojky v parametru funkce vytvářející pole.
Asi nerozumím řeči tvého kmene... To si jako představuješ, že je nějaký filtr implementovaný na jeden řádek? Viděl jsi ten kód kolem, nebo ses vůbec neobtěžoval?

Citace od: gl kdy 08. 09. 2016, 14:47:46
Normální člověk by to napsal takto:
Takže normální je ten, kdo nepoužívá a pokud možno ani nezná bitové operace. Když je použije, tak je nenormální. Hrozná demagogie.

Pod filtrem jsem si představoval operaci, která bude praváděna mnohokrát, bude tedy dávat smysl ji optimalizovat. Ten kód co jsi poslal, spočte konstantu, vytvoří pole a po prvcích ho vydělí konstantou. Tu konstantu ale spočte jen jednou. Navíc si jsem jistý, že << není rychlejší než **.

Tobě opravdu nepřijde přirozenější zapisovat umocňování jako umocňování a ne jako bitový posun? V matematických vzorcích také píšeš 1 << N namísto 2^N?
Proč? Protože to někdo nejprve přepsal z Fortranu do assembleru, pak z assembleru do céčka, pak někdo další z céčka do Pythonu :-)))

Tuxik

  • *****
  • 1 473
Re:Bitové operace ve vyšších jazycích
« Odpověď #207 kdy: 08. 09. 2016, 15:55:56 »
Citace od: javaman (( kdy 08. 09. 2016, 15:37:20
Problém je v tom, že zaměňuješ manuální dělníky s vývojářem. Vývoj se nedá naučit.
Problém je v tom, že u manuálního dělníka se velmi lehce a rychle pozná, jestli něco umí a těžto to okecá, zatímco u vývojářské motyky je okecávání často to jediný, co umí. Neboj, tebe se to netýká, o tobě si tu už nikdo nemyslí, že by jsi byl vývojář, ty jsi čistokrevný okecávač bez vývojářských ambic :D

v

Re:Bitové operace ve vyšších jazycích
« Odpověď #208 kdy: 08. 09. 2016, 15:57:12 »
Citace od: gl kdy 08. 09. 2016, 15:49:57
Citace od: gamer kdy 08. 09. 2016, 15:40:39
Citace od: gl kdy 08. 09. 2016, 14:47:46
To není filtr. To je jen výpočet mocniny dvojky v parametru funkce vytvářející pole.
Asi nerozumím řeči tvého kmene... To si jako představuješ, že je nějaký filtr implementovaný na jeden řádek? Viděl jsi ten kód kolem, nebo ses vůbec neobtěžoval?

Citace od: gl kdy 08. 09. 2016, 14:47:46
Normální člověk by to napsal takto:
Takže normální je ten, kdo nepoužívá a pokud možno ani nezná bitové operace. Když je použije, tak je nenormální. Hrozná demagogie.

Pod filtrem jsem si představoval operaci, která bude praváděna mnohokrát, bude tedy dávat smysl ji optimalizovat. Ten kód co jsi poslal, spočte konstantu, vytvoří pole a po prvcích ho vydělí konstantou. Tu konstantu ale spočte jen jednou. Navíc si jsem jistý, že << není rychlejší než **.

Tobě opravdu nepřijde přirozenější zapisovat umocňování jako umocňování a ne jako bitový posun? V matematických vzorcích také píšeš 1 << N namísto 2^N?
<< je bitový posun, ** je umocnění, jedno funguje jen s celými čísly, druhé i s floating point čísly, u matematických vzorců bývá uveden "datový type"

gl

Re:Bitové operace ve vyšších jazycích
« Odpověď #209 kdy: 08. 09. 2016, 16:00:08 »
Citace od: v kdy 08. 09. 2016, 15:57:12
Citace od: gl kdy 08. 09. 2016, 15:49:57
Citace od: gamer kdy 08. 09. 2016, 15:40:39
Citace od: gl kdy 08. 09. 2016, 14:47:46
To není filtr. To je jen výpočet mocniny dvojky v parametru funkce vytvářející pole.
Asi nerozumím řeči tvého kmene... To si jako představuješ, že je nějaký filtr implementovaný na jeden řádek? Viděl jsi ten kód kolem, nebo ses vůbec neobtěžoval?

Citace od: gl kdy 08. 09. 2016, 14:47:46
Normální člověk by to napsal takto:
Takže normální je ten, kdo nepoužívá a pokud možno ani nezná bitové operace. Když je použije, tak je nenormální. Hrozná demagogie.

Pod filtrem jsem si představoval operaci, která bude praváděna mnohokrát, bude tedy dávat smysl ji optimalizovat. Ten kód co jsi poslal, spočte konstantu, vytvoří pole a po prvcích ho vydělí konstantou. Tu konstantu ale spočte jen jednou. Navíc si jsem jistý, že << není rychlejší než **.

Tobě opravdu nepřijde přirozenější zapisovat umocňování jako umocňování a ne jako bitový posun? V matematických vzorcích také píšeš 1 << N namísto 2^N?
<< je bitový posun, ** je umocnění, jedno funguje jen s celými čísly, druhé i s floating point čísly, u matematických vzorců bývá uveden "datový type"

jak zapíšeš jedním bitovým posunem 3**5?