Re: přetečení int v C arduino

Tomáš Hamouz hamouz na divesoft.cz
Pátek Červenec 18 09:33:56 CEST 2014


Pravidla konverze typů tu nedávno popisoval wek, zkuste prohlededat archiv.

Tomáš


> Jasne, otazka je, kam se ukladaji mezivysledky a jak se dela 
> optimalizace kodu. Priznam se, ze v tom taky plavu, ale mozna bych si 
> dovedl predstavit postup, kdy se interne pracuje s promennou v int, 
> takze komplikator ocekava vysledek take v int. Co to udela, kdyz i z den
> udelate long? Jiste, je to mrhani prostredky, ale vysledek by mne zajimal.

> Predpokladam, ze to tu nekdo (kolega wek?) vysvetli, docela by mne to 
> take zajimalo.

> Pavel Kutina



> Dne 18.7.2014 9:03, Petr Zapadlo napsal(a):
>> Zdravím,
>>
>> cas1 je ulong - tj na arudinu očekávám 32bit.
>> Tam je rezerva dost velká.
>> Záleží jak se přesně počítá,
>> cas1 je ulong, den je int. Tedy člen den*86400 bude do intu velký, ale
>> do ulong vyhovující.
>>
>> Jak dochází k přetypování?
>>
>> Petr
>>
>>
>> Dne 18.7.2014 08:28, Pavel Kutina napsal(a):
>>>
>>> Skoly nemam, ale at na to koukam, jak chci, tak mi vychazi, ze v radku
>>> cas1=cas1-den*86400;
>>> bude "den" vzdycky mimo rozsah int i uint (tedy za predpokladu, ze den
>>> je vetsi nez jedna, coz tak nejak obvykle byva). Pritlacil bych na long.
>>>
>>> Pavel Kutina
>>>
>>>
>>> Dne 18.7.2014 8:02, Petr Zapadlo napsal(a):
>>>> Bude,
>>>> to jsem pochopil, proto jsem taky změnil  délku datového typu.
>>>> tady mě ram netrápí, ale chci chápat co se děje do budoucna.
>>>>
>>>> Zakopaný pes je zřejmně zde:
>>>>
>>>> cas1=cas1-den*86400;            //cas1=36000
>>>> hodina=int(cas1/3600);            //hodina=10, cas1=65535
>>>>    cas1=cas1-hodina*3600;
>>>>
>>>> v které přesně operaci to přeteče a proč?
>>>> cas1 unsigned log, takže rezerva je tam dost velká.
>>>> Zápis:
>>>> int(cas1/3600)
>>>>
>>>> chápu tak, že výpočet se provede v ulong a převede se na int.
>>>>
>>>> Je  to tak?
>>>>
>>>> Díky
>>>>
>>>> Petr
>>>>
>>>>
>>>>
>>>>
>>>> Dne 18.7.2014 07:56, Robert Baranka napsal(a):
>>>>> nebude to "neco" mat suvislost s 2^15, teda -32768 az 32767?
>>>>> :-D
>>>>> Robo
>>>>>
>>>>> Dňa 18. 7. 2014 7:37 Petr Simek  wrote / napísal(a):
>>>>>>
>>>>>> Int je signed tedy +-32000 a neco. Co zkusit uint ?
>>>>>>
>>>>>>> Petr
>>>>>>



Další informace o konferenci Hw-list