Násobení velkých čísel

Odpovědět
Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Násobení velkých čísel

Příspěvek od Ludek » 18 lis 2020, 16:14

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.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

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

Příspěvek od pavel1tu » 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)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 18 lis 2020, 19:21

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;

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

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

Příspěvek od pavel1tu » 18 lis 2020, 19:25

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é ;)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

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

Příspěvek od Ludek » 20 lis 2020, 14:53

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í)

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 20 lis 2020, 15:17

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;

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

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

Příspěvek od Caster » 20 lis 2020, 15:29

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.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

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

Příspěvek od Ludek » 20 lis 2020, 16:24

Dostal jsi mě :-) jasně že 4096 . jdu to zkoušet.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů