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 »
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:

Kód: [Vybrat]
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 »
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 »
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 »
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?

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 »
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:

Kód: [Vybrat]
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.

Kód: [Vybrat]
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 »
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 »
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 »
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 »
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?

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 »

Kód: [Vybrat]
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 »
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 »
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?

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
    • Zobrazit profil
    • E-mail
Re:Bitové operace ve vyšších jazycích
« Odpověď #207 kdy: 08. 09. 2016, 15:55:56 »
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 »
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?

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 »
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?

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?