Stránka 1 z 1

Násobení velkých čísel

Napsal: 18 lis 2020, 16:14
od Ludek
Zdravím,
tak jsem narazil... úplná jednoduchost, ale pro mne neřešitelná.
Násobení velkých čísel... Jak deklarovat jejich typ - s tím se trápím.
příklad :
mám číslo a (v rozsahu 0 až 5000)
mám číslo b (v rozsahu 0 až 5000)
a potřebuji výsledek jako číslo c ( tedy ten bude v rozsahu 0 až 25 milionů)
díky za radu.

Re: Násobení velkých čísel

Napsal: 18 lis 2020, 16:33
od pavel1tu
https://www.arduino.cc/reference/en/lan ... ypes/long/

Kód: Vybrat vše

long x = 5000L;
long y = 5000L;
long xy = (long) x * (long) y;
//nebo přímo čísla
long xy = 5000L * 5000L;

Pro ještě větší čísla pokud nepůjdeš do mínusu "unsigned long" (UL)

Re: Násobení velkých čísel

Napsal: 18 lis 2020, 19:21
od jankop
pavel1tu píše:
18 lis 2020, 16:33
https://www.arduino.cc/reference/en/lan ... ypes/long/

Kód: Vybrat vše

long x = 5000L;
long y = 5000L;
long xy = (long) x * (long) y;
//nebo přímo čísla
long xy = 5000L * 5000L;

Pro ještě větší čísla pokud nepůjdeš do mínusu "unsigned long" (UL)
Řek' bych:"Na mý gusto nějak přetypováno! X a Y jsou už long."

Kód: Vybrat vše

long xy = (long) x * (long) y;

Re: Násobení velkých čísel

Napsal: 18 lis 2020, 19:25
od pavel1tu
jankop píše:
18 lis 2020, 19:21
Řek' bych:"Na mý gusto nějak přetypováno! X a Y jsou už long."

Kód: Vybrat vše

long xy = (long) x * (long) y;
No, ale mne to někdy bralo jako long a někdy ne, v jednom programu. Ale mám tucha, že to bylo násobení int a long možná, pak jsem to opravdu přeehnal.
A nebo si to špatně pamatuji, což je v mém případě hodně pravděpodobné ;)

Re: Násobení velkých čísel

Napsal: 20 lis 2020, 14:53
od Ludek
Pánové díky... ještě maličkost...
jak to upravit, když x a y jsou int (jsou to výsledky z předchozích operací)

Re: Násobení velkých čísel

Napsal: 20 lis 2020, 15:17
od jankop
No to je právě to přetypování, to jsou ty kulaté závorky s uvedením typu, na který chci následující výraz převést.

Kód: Vybrat vše

int x,y;

...

long xy = (long) x * (long) y;
respektive

Kód: Vybrat vše

int x,y;
long xy;

...

xy = (long) x * (long) y;

Re: Násobení velkých čísel

Napsal: 20 lis 2020, 15:29
od Caster
Hele, není mi jasný, kde jsi vzal zrovna hodnotu 5 000. Binárně je na její uložení potřeba 12,29 bitů (2^12,29=5 000) a nevypadá to, že jde o výstup nějakého převodníku.

Re: Násobení velkých čísel

Napsal: 20 lis 2020, 16:24
od Ludek
Dostal jsi mě :-) jasně že 4096 . jdu to zkoušet.